Merge remote-tracking branch 'original/main' into merge-211113
This commit is contained in:
commit
185a7a686f
10
.gitignore
vendored
10
.gitignore
vendored
|
@ -52,3 +52,13 @@ samples/HelloPGX/hello.pgx
|
||||||
samples/HelloPGX/hello.lst
|
samples/HelloPGX/hello.lst
|
||||||
src/mapfile
|
src/mapfile
|
||||||
src/mapfile
|
src/mapfile
|
||||||
|
src/foenixmcp_20211026_1.bin
|
||||||
|
src/foenixmcp_20211026_1.bin
|
||||||
|
src/foenixmcp_20211027_1.bin
|
||||||
|
src/foenixmcp_setsof.bin
|
||||||
|
src/foenixmcp_u_20201020.bin
|
||||||
|
src/foenixmcp.bin
|
||||||
|
src/foenixmcp_ram.bin
|
||||||
|
src/foenixmcp_flash.bin
|
||||||
|
src/bin/archive/foenixmcp_u_flash_20211111_03.bin
|
||||||
|
src/bin/archive/foenixmcp_u_flash_20211112_06.bin
|
||||||
|
|
|
@ -63,31 +63,31 @@ def program_flash(port, filename, hex_address):
|
||||||
address = base_address
|
address = base_address
|
||||||
print("About to upload image to address 0x{:X}".format(address), flush=True)
|
print("About to upload image to address 0x{:X}".format(address), flush=True)
|
||||||
|
|
||||||
if os.path.getsize(filename) == FLASH_SIZE:
|
#if os.path.getsize(filename) == FLASH_SIZE:
|
||||||
if confirm("Are you sure you want to reprogram the flash memory? (y/n): "):
|
if confirm("Are you sure you want to reprogram the flash memory? (y/n): "):
|
||||||
with open(filename, "rb") as f:
|
with open(filename, "rb") as f:
|
||||||
c256 = foenix.FoenixDebugPort()
|
c256 = foenix.FoenixDebugPort()
|
||||||
|
try:
|
||||||
|
c256.open(port)
|
||||||
|
c256.enter_debug()
|
||||||
try:
|
try:
|
||||||
c256.open(port)
|
block = f.read(CHUNK_SIZE)
|
||||||
c256.enter_debug()
|
while block:
|
||||||
try:
|
c256.write_block(address, block)
|
||||||
|
address += len(block)
|
||||||
block = f.read(CHUNK_SIZE)
|
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)
|
print("Binary file uploaded...", flush=True)
|
||||||
c256.erase_flash()
|
c256.erase_flash()
|
||||||
print("Flash memory erased...", flush=True)
|
print("Flash memory erased...", flush=True)
|
||||||
c256.program_flash(base_address)
|
c256.program_flash(base_address)
|
||||||
print("Flash memory programmed...")
|
print("Flash memory programmed...")
|
||||||
finally:
|
|
||||||
c256.exit_debug()
|
|
||||||
finally:
|
finally:
|
||||||
c256.close()
|
c256.exit_debug()
|
||||||
else:
|
finally:
|
||||||
print("The provided flash file is not the right size.")
|
c256.close()
|
||||||
|
# else:
|
||||||
|
# print("The provided flash file is not the right size.")
|
||||||
|
|
||||||
def dereference(port, file, label):
|
def dereference(port, file, label):
|
||||||
"""Get the address contained in the pointer with the label in the label file."""
|
"""Get the address contained in the pointer with the label in the label file."""
|
||||||
|
@ -140,7 +140,7 @@ def display(base_address, data):
|
||||||
text_buff = text_buff + "."
|
text_buff = text_buff + "."
|
||||||
else:
|
else:
|
||||||
text_buff = text_buff + "."
|
text_buff = text_buff + "."
|
||||||
|
|
||||||
sys.stdout.write(' {}\n'.format(text_buff))
|
sys.stdout.write(' {}\n'.format(text_buff))
|
||||||
|
|
||||||
def send_wdc(port, filename):
|
def send_wdc(port, filename):
|
||||||
|
@ -161,7 +161,7 @@ def send_wdc(port, filename):
|
||||||
finally:
|
finally:
|
||||||
infile.close()
|
infile.close()
|
||||||
finally:
|
finally:
|
||||||
c256.close()
|
c256.close()
|
||||||
|
|
||||||
def send_srec(port, filename):
|
def send_srec(port, filename):
|
||||||
"""Send the data in the SREC hex file 'filename' to the C256 on the given serial port."""
|
"""Send the data in the SREC hex file 'filename' to the C256 on the given serial port."""
|
||||||
|
@ -257,7 +257,7 @@ parser.add_argument("--lookup", metavar="LABEL", dest="lookup_name",
|
||||||
help="Display the memory starting at the address indicated by the label.")
|
help="Display the memory starting at the address indicated by the label.")
|
||||||
|
|
||||||
parser.add_argument("--revision", action="store_true", dest="revision",
|
parser.add_argument("--revision", action="store_true", dest="revision",
|
||||||
help="Display the revision code of the debug interface.")
|
help="Display the revision code of the debug interface.")
|
||||||
|
|
||||||
parser.add_argument("--flash", metavar="BINARY FILE", dest="flash_file",
|
parser.add_argument("--flash", metavar="BINARY FILE", dest="flash_file",
|
||||||
help="Attempt to reprogram the flash using the binary file provided.")
|
help="Attempt to reprogram the flash using the binary file provided.")
|
||||||
|
@ -321,4 +321,3 @@ try:
|
||||||
parser.print_help()
|
parser.print_help()
|
||||||
finally:
|
finally:
|
||||||
print
|
print
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,7 @@ Building this project requires the [VBCC](http://www.compilers.de/vbcc.html) com
|
||||||
```MAKE``` utility. Using your command line, go into the ```src``` directory and type:
|
```MAKE``` utility. Using your command line, go into the ```src``` directory and type:
|
||||||
|
|
||||||
```
|
```
|
||||||
|
export VBCC = <use-your-projects-dir>/FoenixMCP/vbcc
|
||||||
make all
|
make all
|
||||||
```
|
```
|
||||||
to build the kernel.
|
to build the kernel.
|
||||||
|
|
2
c256.ini
2
c256.ini
|
@ -1,4 +1,4 @@
|
||||||
[DEFAULT]
|
[DEFAULT]
|
||||||
port=COM9
|
port=COM6
|
||||||
labels=sample.lbl
|
labels=sample.lbl
|
||||||
flash_address=380000
|
flash_address=380000
|
||||||
|
|
BIN
docs/FoenixMCP Manual.epub
Normal file
BIN
docs/FoenixMCP Manual.epub
Normal file
Binary file not shown.
BIN
docs/FoenixMCP Manual.odt
Normal file
BIN
docs/FoenixMCP Manual.odt
Normal file
Binary file not shown.
BIN
docs/FoenixMCP Manual.pdf
Normal file
BIN
docs/FoenixMCP Manual.pdf
Normal file
Binary file not shown.
BIN
docs/OS Layout.odg
Normal file
BIN
docs/OS Layout.odg
Normal file
Binary file not shown.
Binary file not shown.
|
@ -1,185 +0,0 @@
|
||||||
\documentclass{report}
|
|
||||||
\usepackage[T1]{fontenc}
|
|
||||||
\usepackage{ccfonts}
|
|
||||||
\begin{document}
|
|
||||||
\newcommand{\MCP}{{\sc Foenix/MCP}}
|
|
||||||
\newcommand{\param}[1]{{\tt #1}}
|
|
||||||
\newcommand{\name}[1]{{\tt #1}}
|
|
||||||
|
|
||||||
\title{{\MCP} a Simple, Portable Operating System for the Foenix Line of Computers}
|
|
||||||
\author{Peter J. Weingartner}
|
|
||||||
\date{19 September, 2021}
|
|
||||||
\maketitle
|
|
||||||
|
|
||||||
\chapter{Overview}
|
|
||||||
|
|
||||||
\section{Copyrights}
|
|
||||||
|
|
||||||
\chapter{Command Line Utility}
|
|
||||||
|
|
||||||
\section{Paths}
|
|
||||||
|
|
||||||
\section{External Commands}
|
|
||||||
|
|
||||||
\section{Internal Commands}
|
|
||||||
|
|
||||||
\subsection{Numbers}
|
|
||||||
|
|
||||||
Several internal commands use numbers as arguments.
|
|
||||||
These numbers can be specified in one of three ways: decimal, binary, or hexadecimal.
|
|
||||||
A decimal number is written just the usual numerals between \param{0} and \param{9}.
|
|
||||||
A binary number must be prefixed with either \param{\%} or \param{0b}.
|
|
||||||
A hexadecimal number must be prefixed with either \param{\$} or \param{0x}.
|
|
||||||
|
|
||||||
\subsection{File System Commands}
|
|
||||||
|
|
||||||
\subsection{Memory Commands}
|
|
||||||
|
|
||||||
\subsection{Graphics Commands}
|
|
||||||
|
|
||||||
\chapter{Devices}
|
|
||||||
|
|
||||||
There are two main ways of supporting devices in {\MCP}: channel devices, and block devices.
|
|
||||||
Bytes may be written to or read from a channel, but the bytes are always in order.
|
|
||||||
Every channel has a ``cursor'', which marks where the next byte to read or write is.
|
|
||||||
Some channels may support the ability to move the cursor, but some will not have that ability.
|
|
||||||
Examples of channels include the text screens, the keyboard, the serial port, and files open for
|
|
||||||
reading or writing.
|
|
||||||
|
|
||||||
Block devices, on the other hand support reading or writing an entire block of bytes at a time.
|
|
||||||
Every block has an ``address'' on the device, and blocks may be read or written in any order
|
|
||||||
and location by specifying the address desired. Examples of block devices include a hard drive,
|
|
||||||
SD card, or floppy drive.
|
|
||||||
|
|
||||||
\section{Channels and Channel Devices}
|
|
||||||
|
|
||||||
{\MCP} supports several channel devices, including: main console screen, secondary console screen
|
|
||||||
(Channel B or the EVID card), the COM ports on the computer, MIDI ports (if available), and
|
|
||||||
parallel printer port (if available):
|
|
||||||
|
|
||||||
\begin{table}
|
|
||||||
\begin{center}
|
|
||||||
\begin{tabular}{|l|l|l| } \hline
|
|
||||||
Number & Device & Name \\ \hline
|
|
||||||
0 & Console (Channel A) & \param{@CONA:} \\ \hline
|
|
||||||
1 & Channel B or EVID & \param{@CONB:} \\ \hline
|
|
||||||
2 & Serial Port \#1 & \param{@COM1:} \\ \hline
|
|
||||||
3 & Serial Port \#2 & \param{@COM2:} \\ \hline
|
|
||||||
4 & Parallel Port & \param{@LPT1:} \\ \hline
|
|
||||||
5 & MIDI Port & \param{@MIDI:} \\ \hline
|
|
||||||
\end{tabular}
|
|
||||||
\end{center}
|
|
||||||
\caption{Built in channel devices}
|
|
||||||
\label{cdev:list}
|
|
||||||
\end{table}
|
|
||||||
|
|
||||||
Channel devices support several operations. User programs will not generally access channel devices
|
|
||||||
directly, but will instead access them through an open channel. Each channel will be referenced by
|
|
||||||
its number. By default, the operating system will have already created a channel for each channel
|
|
||||||
device present on the system, and the channel number will match that of its device. Another source
|
|
||||||
of channels is to open a file (see below).
|
|
||||||
|
|
||||||
\begin{itemize}
|
|
||||||
\item Read---Read a number of bytes from the channel.
|
|
||||||
|
|
||||||
\item Read Byte---Read a single byte from the channel.
|
|
||||||
|
|
||||||
\item Read Line---Read a line of text from the channel (delimited by a newline character).
|
|
||||||
|
|
||||||
\item Write---Write a number of bytes to the channel device.
|
|
||||||
|
|
||||||
\item Write Byte---Write a single byte to the channel.
|
|
||||||
|
|
||||||
\item Flush---Ensure that any pending writes are completed on the device.
|
|
||||||
|
|
||||||
\item Seek---Move the channel cursor to a different position in the channel. This may not be supported by all types of channels.
|
|
||||||
|
|
||||||
\item Status---Return the status of the block device.
|
|
||||||
|
|
||||||
\item IOCTRL---Set options for the block device. Some options will be common, but others will be device-dependent.
|
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
\section{Block Devices}
|
|
||||||
|
|
||||||
{\MCP} supports three block devices: SD cards, hard drives on the IDE (PATA) interface, and floppy drives.
|
|
||||||
|
|
||||||
\begin{table}
|
|
||||||
\begin{center}
|
|
||||||
\begin{tabular}{|l|l|l| } \hline
|
|
||||||
Number & Device & Name \\ \hline
|
|
||||||
0 & SD Card & \param{@S:} \\ \hline
|
|
||||||
1 & Floppy Drive & \param{@F:} \\ \hline
|
|
||||||
2 & Hard Drive & \param{@H:} \\ \hline
|
|
||||||
\end{tabular}
|
|
||||||
\end{center}
|
|
||||||
\caption{Built in block devices}
|
|
||||||
\label{bdev:list}
|
|
||||||
\end{table}
|
|
||||||
|
|
||||||
Block devices support several operations:
|
|
||||||
|
|
||||||
\begin{itemize}
|
|
||||||
\item Read---Read a block of data from the block device.
|
|
||||||
|
|
||||||
\item Write---Write a block of data to the block device.
|
|
||||||
|
|
||||||
\item Flush---Ensure that any pending writes are completed on the device.
|
|
||||||
|
|
||||||
\item Status---Return the status of the block device.
|
|
||||||
|
|
||||||
\item IOCTRL---Set options for the block device. Some options will be common, but others will be device-dependent.
|
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
\section{Files}
|
|
||||||
|
|
||||||
{\MCP} provides for file access on block devices. The operations supported for files include:
|
|
||||||
|
|
||||||
\begin{itemize}
|
|
||||||
\item Open---Create a channel (with a unique channel number) which can be used to read, write, or append a file.
|
|
||||||
|
|
||||||
\item Close---Shut down access to a previously open file, given its channel number. Files open for writing or appending will commit any pending write operations.
|
|
||||||
|
|
||||||
\item Delete---Remove a file from its block device.
|
|
||||||
|
|
||||||
\item Rename---Change the name of a file.
|
|
||||||
|
|
||||||
\item Copy---Make a copy of a file.
|
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
In addition to files, {\MCP} supports directory access:
|
|
||||||
|
|
||||||
\begin{itemize}
|
|
||||||
\item OpenDir---Open a directory to list out the files present.
|
|
||||||
|
|
||||||
\item CloseDir---Close a previously open directory.
|
|
||||||
|
|
||||||
\item ReadDir---Read an entry out of an open directory.
|
|
||||||
|
|
||||||
\item FindFirst---Find the first entry in a directory that matches a search pattern.
|
|
||||||
|
|
||||||
\item FindNext---Find the next entry in a directory that matches a search pattern.
|
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
\chapter{System Calls}
|
|
||||||
|
|
||||||
\section{Channel Calls}
|
|
||||||
|
|
||||||
\section{Block Calls}
|
|
||||||
|
|
||||||
\section{File System Calls}
|
|
||||||
|
|
||||||
\section{Miscellaneous Calls}
|
|
||||||
|
|
||||||
\chapter{Keyboard Operations}
|
|
||||||
|
|
||||||
\section{Scancodes}
|
|
||||||
|
|
||||||
\section{Translation Tables}
|
|
||||||
|
|
||||||
\chapter{Implementing Device Drivers}
|
|
||||||
|
|
||||||
\section{Channel Device Drivers}
|
|
||||||
|
|
||||||
\section{Block Device Drivers}
|
|
||||||
|
|
||||||
\end{document}
|
|
87
docs/notes/a2560u_memory.txt
Normal file
87
docs/notes/a2560u_memory.txt
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
// MC68SEC000 Memory Map Model
|
||||||
|
//1Mx16 (2x 1Mx8) <- $0000_0000 - $001F_FFFF - RAM (U Model)
|
||||||
|
//2Mx16 (2x 2Mx8) <- $0000_0000 - $003F_FFFF - RAM (U + Model)
|
||||||
|
// $0040_0000 - $00AF_FFFF - FREE SPACE (Future SDRAM Expansion Card?)
|
||||||
|
|
||||||
|
// $00B0_0000 - $00B1_FFFF - GABE Registers (SuperIO/Math Block/SDCard/IDE/Ethernet/SDMA)
|
||||||
|
// $00B2_0000 - $00B3_FFFF - BEATRIX Registers (CODEC/ADC/DAC0/DAC1/PSG/SID)
|
||||||
|
// $00B4_0000 - $00B5_FFFF - VICKY Registers
|
||||||
|
// $00B6_0000 - $00B6_3FFF - TEXT Memory
|
||||||
|
// $00B6_4000 - $00B6_7FFF - Color Memory
|
||||||
|
|
||||||
|
// $00BF_0000 - $00BF_FFFF - EXPANSION Chip Select
|
||||||
|
// 512Kx32 (2Mx8) <- $00C0_0000 - $00DF_FFFF - VRAM MEMORY
|
||||||
|
// 1Mx16 (2Mx8) <- $00E0_0000 - $00FF_FFFF - FLASH0
|
||||||
|
|
||||||
|
so the Keyboard is $B02800 - $B0280F
|
||||||
|
The Serial is @ $B028F8 - $B028FF
|
||||||
|
#ifndef KeyboardH /* Include guard */
|
||||||
|
#define KeyboardH
|
||||||
|
// Status
|
||||||
|
#define OUT_BUF_FULL 0x01
|
||||||
|
#define INPT_BUF_FULL 0x02
|
||||||
|
#define SYS_FLAG 0x04
|
||||||
|
#define CMD_DATA 0x08
|
||||||
|
#define KEYBD_INH 0x10
|
||||||
|
#define TRANS_TMOUT 0x20
|
||||||
|
#define RCV_TMOUT 0x40
|
||||||
|
#define PARITY_EVEN 0x80
|
||||||
|
#define INH_KEYBOARD 0x10
|
||||||
|
#define KBD_ENA 0xAE
|
||||||
|
#define KBD_DIS 0xAD
|
||||||
|
// Keyboard
|
||||||
|
unsigned char * STATUS_PORT = (void *)0x00B02804;
|
||||||
|
unsigned char * KBD_OUT_BUF = (void *)0x00B02800;
|
||||||
|
unsigned char * KBD_INPT_BUF = (void *)0x00B02800;
|
||||||
|
unsigned char * KBD_CMD_BUF = (void *)0x00B02804;
|
||||||
|
unsigned char * KBD_DATA_BUF = (void *)0x00B02800;
|
||||||
|
|
||||||
|
unsigned char * PORT_A = (void *)0x00B02808;
|
||||||
|
unsigned char * PORT_B = (void *)0x00B02809;
|
||||||
|
|
||||||
|
|
||||||
|
assign CS0 = ( ADDY_In[23:22] == 2'b00 ) & ( UserData | UserProgram | SuperData | SuperProgram ); //$000000 - $3FFFFF
|
||||||
|
assign BERR = ( ADDY_In[23:22] == 2'b01 ) & ( UserData | UserProgram | SuperData | SuperProgram ); //$400000 - $7FFFFF
|
||||||
|
|
||||||
|
assign CS_GABE = ( ADDY_In[23:17] == 7'b1011_000 ) & ( UserData | SuperData ); //$B0
|
||||||
|
assign CS_BEATRIX = ( ADDY_In[23:17] == 7'b1011_001 ) & ( UserData | SuperData ); //$B2
|
||||||
|
// Vicky II
|
||||||
|
assign CS_VICKY = ( ADDY_In[23:17] == 7'b1011_010 ) & ( UserData | SuperData ); //$B4
|
||||||
|
assign CS_VICKY_MEM = ( ADDY_In[23:17] == 7'b1011_011 ) & ( UserData | SuperData ); //$B6
|
||||||
|
assign CS_EXP = ( ADDY_In[23:16] == 8'b1011_1111 ) & ( UserData | SuperData ); //$BF
|
||||||
|
// Video RAM
|
||||||
|
assign CS_VRAM = ( ADDY_In[23:21] == 3'b110 ) & ( UserData | SuperData ); //$C0_0000 - DFFFFF (2M)
|
||||||
|
assign FLASH0 = ( ADDY_In[23:21] == 3'b111 ) & ( SuperData | SuperProgram ); //$E0_0000 - FFFFFF (2M)
|
||||||
|
assign CS0 = ( ADDY_In[23:22] == 2'b00 ) & ( UserData | UserProgram | SuperData | SuperProgram ); //$000000 - $3FFFFF
|
||||||
|
assign BERR = ( ADDY_In[23:22] == 2'b01 ) & ( UserData | UserProgram | SuperData | SuperProgram ); //$400000 - $7FFFFF
|
||||||
|
|
||||||
|
assign CS_GABE = ( ADDY_In[23:17] == 7'b1011_000 ) & ( UserData | SuperData ); //$B0
|
||||||
|
assign CS_BEATRIX = ( ADDY_In[23:17] == 7'b1011_001 ) & ( UserData | SuperData ); //$B2
|
||||||
|
// Vicky II
|
||||||
|
assign CS_VICKY = ( ADDY_In[23:17] == 7'b1011_010 ) & ( UserData | SuperData ); //$B4
|
||||||
|
assign CS_VICKY_MEM = ( ADDY_In[23:17] == 7'b1011_011 ) & ( UserData | SuperData ); //$B6
|
||||||
|
assign CS_EXP = ( ADDY_In[23:16] == 8'b1011_1111 ) & ( UserData | SuperData ); //$BF
|
||||||
|
// Video RAM
|
||||||
|
assign CS_VRAM = ( ADDY_In[23:21] == 3'b110 ) & ( UserData | SuperData ); //$C0_0000 - DFFFFF (2M)
|
||||||
|
assign FLASH0 = ( ADDY_In[23:21] == 3'b111 ) & ( SuperData | SuperProgram ); //$E0_0000 - FFFFFF (2M)
|
||||||
|
***
|
||||||
|
assign CS_VICKY_REG_o = ( iBUS_A_i[16:7] == 10'b0_0000_0000_0) & iBUS_CS_VICKY_i; // $B40000..$B4007F - Control Registers
|
||||||
|
assign CS_Bitmap_Registers_o = ( iBUS_A_i[16:8] == 9'b0_0000_0001) & iBUS_CS_VICKY_i; // $B40100..$B401FF - Bitmap Control Registers
|
||||||
|
assign CS_Tile0_Registers_o = ( iBUS_A_i[16:7] == 10'b0_0000_0010_0) & iBUS_CS_VICKY_i; // $B40200..$B4027F - TileMap Control Registers
|
||||||
|
assign CS_Tile1_Registers_o = ( iBUS_A_i[16:7] == 10'b0_0000_0010_1) & iBUS_CS_VICKY_i; // $B40280..$B402FF - TileSet Control Registers
|
||||||
|
assign CS_Collisions_Registers_o = ( iBUS_A_i[16:8] == 9'b0_0000_0011) & iBUS_CS_VICKY_i; // $B40300..$B403FF - Collision Control Registers
|
||||||
|
assign CS_Mouse_Ptr_Graphics_o = ( iBUS_A_i[16:10] == 7'b0_0000_01) & iBUS_CS_VICKY_i; // $B40400..$B40BFF - Mouser Pointer graphics 16x16 ARGB x2
|
||||||
|
assign CS_Mouse_Ptr_Registers_o = ( iBUS_A_i[16:8] == 9'b0_0000_1100) & iBUS_CS_VICKY_i; // $B40C00..$B40CFF - Mouser Pointer Registers
|
||||||
|
|
||||||
|
assign CS_Sprites_Registers_o = ( iBUS_A_i[16:12] == 5'b0_0001) & iBUS_CS_VICKY_i; // $B41000..$B41FFF - Sprites Registers
|
||||||
|
assign CS_LUT0_o = ( iBUS_A_i[16:13] == 4'b0_001) & iBUS_CS_VICKY_i; // $B42000..$B43FFF - LUT
|
||||||
|
assign CS_GAMMA_B_o = ( iBUS_A_i[16:8] == 9'b0_0100_0000) & iBUS_CS_VICKY_i; // $B44000..$B440FF - GAMMA Blue
|
||||||
|
assign CS_GAMMA_G_o = ( iBUS_A_i[16:8] == 9'b0_0100_0001) & iBUS_CS_VICKY_i; // $B44100..$B441FF - GAMMA Green
|
||||||
|
assign CS_GAMMA_R_o = ( iBUS_A_i[16:8] == 9'b0_0100_0010) & iBUS_CS_VICKY_i; // $B44200..$B442FF - GAMMA Red
|
||||||
|
|
||||||
|
// $B6_0000 - $BE_FFFF - VICKY TEXT MODE Internal Memory and CLUT
|
||||||
|
assign CS_TextMemory_o = (iBUS_A_i[16:14] == 3'b000) & iBUS_CS_VICKY_MEM_i; // $B60000..$B63FFF - Text Memory
|
||||||
|
assign CS_ColorMemory_o = (iBUS_A_i[16:14] == 3'b010) & iBUS_CS_VICKY_MEM_i; // $B68000..$B6BFFF - Color Memory
|
||||||
|
assign CS_BF_CLUT_o = (iBUS_A_i[16:06] == 11'b0_1100_0100_00) & iBUS_CS_VICKY_MEM_i; // $B6C400..$B6C43F - Foreground Character LUT
|
||||||
|
assign CS_BG_CLUT_o = (iBUS_A_i[16:06] == 11'b0_1100_0100_01) & iBUS_CS_VICKY_MEM_i; // $B6C440..$B6C47F - Background Character LUT
|
||||||
|
// $BF:0000 - $BF:FFFF for Expension ChipSelect
|
18
src/Makefile
18
src/Makefile
|
@ -16,18 +16,24 @@ export CPU=32
|
||||||
# MODEL_FOENIX_A2560X 8
|
# MODEL_FOENIX_A2560X 8
|
||||||
# MODEL_FOENIX_A2560U 9
|
# MODEL_FOENIX_A2560U 9
|
||||||
# MODEL_FOENIX_A2560K 13
|
# MODEL_FOENIX_A2560K 13
|
||||||
export MODEL=13
|
export MODEL=9
|
||||||
|
|
||||||
export VER_MAJOR = 0
|
export VER_MAJOR = 0
|
||||||
export VER_MINOR = 0
|
export VER_MINOR = 1
|
||||||
export VER_BUILD = 1
|
export VER_BUILD = 11
|
||||||
|
|
||||||
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 DEFINES = -DCPU=$(CPU) -DMODEL=$(MODEL) -DVER_MAJOR=$(VER_MAJOR) -DVER_MINOR=$(VER_MINOR) -DVER_BUILD=$(VER_BUILD) # -DKBD_POLLED
|
export DEFINES = -DCPU=$(CPU) -DMODEL=$(MODEL) -DVER_MAJOR=$(VER_MAJOR) -DVER_MINOR=$(VER_MINOR) -DVER_BUILD=$(VER_BUILD) # -DKBD_POLLED
|
||||||
export CFLAGS = +../vbcc/config/m68k-foenix -I. -Iinclude
|
|
||||||
export RM = cmd /C del /Q /F
|
ifeq ($(OS),Windows_NT)
|
||||||
|
# export CFLAGS = +$(VBCC)\config\m68k-foenix -I. -I$(CURDIR)\include -I$(CURDIR)
|
||||||
|
export CFLAGS = +$(VBCC)\config\a2560u_flash -I. -I$(CURDIR)\include -I$(CURDIR)
|
||||||
|
export RM = cmd /C del /Q /F
|
||||||
|
else
|
||||||
|
export CFLAGS = +$(VBCC)/config/m68k-foenix-linux -I. -I$(CURDIR)/include -I$(CURDIR)
|
||||||
|
export RM = rm -f
|
||||||
|
endif
|
||||||
|
|
||||||
cpu = m68k
|
cpu = m68k
|
||||||
cpu_assembly_src := $(wildcard $(cpu)/*.s)
|
cpu_assembly_src := $(wildcard $(cpu)/*.s)
|
||||||
|
|
BIN
src/bin/archive/foenixmcp_20211027_1.bin
Normal file
BIN
src/bin/archive/foenixmcp_20211027_1.bin
Normal file
Binary file not shown.
BIN
src/bin/archive/foenixmcp_20211027_2.bin
Normal file
BIN
src/bin/archive/foenixmcp_20211027_2.bin
Normal file
Binary file not shown.
BIN
src/bin/archive/foenixmcp_20211027_3.bin
Normal file
BIN
src/bin/archive/foenixmcp_20211027_3.bin
Normal file
Binary file not shown.
BIN
src/bin/archive/foenixmcp_u_20211105.bin
Normal file
BIN
src/bin/archive/foenixmcp_u_20211105.bin
Normal file
Binary file not shown.
BIN
src/bin/archive/foenixmcp_u_20211108_01.bin
Normal file
BIN
src/bin/archive/foenixmcp_u_20211108_01.bin
Normal file
Binary file not shown.
|
@ -1,4 +1,4 @@
|
||||||
[DEFAULT]
|
[DEFAULT]
|
||||||
port=COM9
|
port=COM6
|
||||||
labels=sample.lbl
|
labels=sample.lbl
|
||||||
flash_address=380000
|
flash_address=380000
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
override CFLAGS = +../../vbcc/config/m68k-foenix -I. -I.. -I../include
|
|
||||||
|
|
||||||
csources = $(wildcard *.c)
|
csources = $(wildcard *.c)
|
||||||
cobjects = $(subst .c,.o,$(csources))
|
cobjects = $(subst .c,.o,$(csources))
|
||||||
|
|
||||||
|
|
175
src/cli/cli.c
175
src/cli/cli.c
|
@ -10,10 +10,19 @@
|
||||||
#include "simpleio.h"
|
#include "simpleio.h"
|
||||||
#include "syscalls.h"
|
#include "syscalls.h"
|
||||||
#include "sys_general.h"
|
#include "sys_general.h"
|
||||||
|
#include "timers.h"
|
||||||
#include "cli/cli.h"
|
#include "cli/cli.h"
|
||||||
#include "cli/dos_cmds.h"
|
#include "cli/dos_cmds.h"
|
||||||
#include "cli/mem_cmds.h"
|
#include "cli/mem_cmds.h"
|
||||||
|
#include "cli/settings.h"
|
||||||
|
#include "cli/sound_cmds.h"
|
||||||
|
#include "cli/test_cmds.h"
|
||||||
|
#include "dev/ps2.h"
|
||||||
#include "dev/rtc.h"
|
#include "dev/rtc.h"
|
||||||
|
#include "dev/uart.h"
|
||||||
|
#include "uart_reg.h"
|
||||||
|
#include "rtc_reg.h"
|
||||||
|
#include "vicky_general.h"
|
||||||
|
|
||||||
#define MAX_COMMAND_SIZE 128
|
#define MAX_COMMAND_SIZE 128
|
||||||
#define MAX_ARGC 32
|
#define MAX_ARGC 32
|
||||||
|
@ -30,11 +39,11 @@ typedef struct s_cli_command {
|
||||||
cli_cmd_handler handler;
|
cli_cmd_handler handler;
|
||||||
} t_cli_command, *p_cli_command;
|
} t_cli_command, *p_cli_command;
|
||||||
|
|
||||||
extern short cmd_gettime(short channel, int argc, char * argv[]);
|
|
||||||
extern short cmd_settime(short channel, int argc, char * argv[]);
|
|
||||||
extern short cmd_sysinfo(short channel, int argc, char * argv[]);
|
extern short cmd_sysinfo(short channel, int argc, char * argv[]);
|
||||||
extern short cmd_cls(short channel, int argc, char * argv[]);
|
extern short cmd_cls(short channel, int argc, char * argv[]);
|
||||||
extern short cmd_showint(short channel, int argc, char * argv[]);
|
extern short cmd_showint(short channel, int argc, char * argv[]);
|
||||||
|
extern short cmd_getjiffies(short channel, int argc, char * argv[]);
|
||||||
|
extern short cmd_get_ticks(short channel, int argc, char * argv[]);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Variables
|
* Variables
|
||||||
|
@ -52,6 +61,8 @@ const t_cli_command g_cli_commands[] = {
|
||||||
{ "DISKFILL", "DISKFILL <drive #> <sector #> <byte value>", cmd_diskfill },
|
{ "DISKFILL", "DISKFILL <drive #> <sector #> <byte value>", cmd_diskfill },
|
||||||
{ "DISKREAD", "DISKREAD <drive #> <sector #>", cmd_diskread },
|
{ "DISKREAD", "DISKREAD <drive #> <sector #>", cmd_diskread },
|
||||||
{ "DUMP", "DUMP <addr> [<count>] : print a memory dump", mem_cmd_dump},
|
{ "DUMP", "DUMP <addr> [<count>] : print a memory dump", mem_cmd_dump},
|
||||||
|
{ "GETJIFFIES", "GETJIFFIES : print the number of jiffies since bootup", cmd_getjiffies },
|
||||||
|
{ "GETTICKS", "GETTICKS : print number of ticks since reset", cmd_get_ticks },
|
||||||
{ "LABEL", "LABEL <drive#> <label> : set the label of a drive", cmd_label },
|
{ "LABEL", "LABEL <drive#> <label> : set the label of a drive", cmd_label },
|
||||||
{ "LOAD", "LOAD <path> : load a file into memory", cmd_load },
|
{ "LOAD", "LOAD <path> : load a file into memory", cmd_load },
|
||||||
{ "MKDIR", "MKDIR <path> : create a directory", cmd_mkdir },
|
{ "MKDIR", "MKDIR <path> : create a directory", cmd_mkdir },
|
||||||
|
@ -62,14 +73,13 @@ const t_cli_command g_cli_commands[] = {
|
||||||
{ "POKE16", "POKE16 <addr> <value> : write the 16-bit value to the address in memory", mem_cmd_poke16 },
|
{ "POKE16", "POKE16 <addr> <value> : write the 16-bit value to the address in memory", mem_cmd_poke16 },
|
||||||
{ "POKE32", "POKE32 <addr> <value> : write the 32-bit value to the address in memory", mem_cmd_poke32 },
|
{ "POKE32", "POKE32 <addr> <value> : write the 32-bit value to the address in memory", mem_cmd_poke32 },
|
||||||
{ "PWD", "PWD : prints the current directory", cmd_pwd },
|
{ "PWD", "PWD : prints the current directory", cmd_pwd },
|
||||||
// { "REN", "REN <old path> <new path> : rename a file or directory", cmd_rename },
|
{ "REN", "REN <old path> <new path> : rename a file or directory", cmd_rename },
|
||||||
{ "RUN", "RUN <path> : execute a binary file", cmd_run },
|
{ "RUN", "RUN <path> : execute a binary file", cmd_run },
|
||||||
{ "GETTIME", "GETTIME : prints the current time", cmd_gettime },
|
{ "SET", "SET <name> <value> : set the value of a setting", cli_cmd_set },
|
||||||
{ "SETTIME", "SETTIME yyyy-mm-dd HH:MM:SS : sets the current time", cmd_settime },
|
{ "GET", "GET <name> : get the value of a setting", cli_cmd_get },
|
||||||
{ "SHOWINT", "SHOWINT : Show information about the interrupt registers", cmd_showint },
|
{ "SHOWINT", "SHOWINT : Show information about the interrupt registers", cmd_showint },
|
||||||
{ "SYSINFO", "SYSINFO : prints information about the system", cmd_sysinfo },
|
{ "SYSINFO", "SYSINFO : prints information about the system", cmd_sysinfo },
|
||||||
{ "TESTIDE", "TESTIDE : fetches and prints the IDE MBR repeatedly", cmd_testide },
|
{ "TEST", "TEST <feature> : run a test about a feature", cmd_test },
|
||||||
{ "TESTCREATE", "TESTCREATE <path> : tries to create a file", cmd_testcreate },
|
|
||||||
{ "TYPE", "TYPE <path> : print the contents of a text file", cmd_type },
|
{ "TYPE", "TYPE <path> : print the contents of a text file", cmd_type },
|
||||||
{ 0, 0 }
|
{ 0, 0 }
|
||||||
};
|
};
|
||||||
|
@ -87,6 +97,25 @@ int cmd_help(short channel, int argc, char * argv[]) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
short cmd_getjiffies(short channel, int argc, char * argv[]) {
|
||||||
|
char buffer[80];
|
||||||
|
|
||||||
|
sprintf(buffer, "%d\n", timers_jiffies());
|
||||||
|
sys_chan_write(channel, buffer, strlen(buffer));;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Print the number of ticks since last restart
|
||||||
|
*/
|
||||||
|
short cmd_get_ticks(short channel, int argc, char * argv[]) {
|
||||||
|
char buffer[80];
|
||||||
|
|
||||||
|
sprintf(buffer, "%d\n", rtc_get_jiffies());
|
||||||
|
sys_chan_write(channel, buffer, strlen(buffer));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Clear the screen
|
* Clear the screen
|
||||||
*/
|
*/
|
||||||
|
@ -102,124 +131,33 @@ short cmd_cls(short channel, int argc, char * argv[]) {
|
||||||
*/
|
*/
|
||||||
short cmd_sysinfo(short channel, int argc, char * argv[]) {
|
short cmd_sysinfo(short channel, int argc, char * argv[]) {
|
||||||
t_sys_info info;
|
t_sys_info info;
|
||||||
|
char buffer[80];
|
||||||
|
|
||||||
sys_get_info(&info);
|
sys_get_info(&info);
|
||||||
print(channel, "System information:\nModel: ");
|
|
||||||
print(channel, info.model_name);
|
|
||||||
|
|
||||||
print(channel, "\nCPU: ");
|
sprintf(buffer, "System information:\nModel: %s", info.model_name);
|
||||||
print(channel, info.cpu_name);
|
sys_chan_write(channel, buffer, strlen(buffer));
|
||||||
|
|
||||||
print(channel, "\nGABE version: ");
|
sprintf(buffer, "\nCPU: %s", info.cpu_name);
|
||||||
print_hex_16(channel, info.gabe_number);
|
sys_chan_write(channel, buffer, strlen(buffer));
|
||||||
print(channel, ".");
|
|
||||||
print_hex_16(channel, info.gabe_version);
|
|
||||||
print(channel, ".");
|
|
||||||
print_hex_16(channel, info.gabe_subrev);
|
|
||||||
|
|
||||||
print(channel, "\nVICKY version: ");
|
sprintf(buffer, "\nSystem Memory: 0x%X", info.system_ram_size);
|
||||||
print_hex_16(channel, info.vicky_rev);
|
sys_chan_write(channel, buffer, strlen(buffer));
|
||||||
|
|
||||||
print(channel, "\n");
|
sprintf(buffer, "\nPCB version: %s", &info.pcb_version);
|
||||||
|
sys_chan_write(channel, buffer, strlen(buffer));
|
||||||
|
|
||||||
return 0;
|
sprintf(buffer, "\nFPGA Date: %08X", info.fpga_date);
|
||||||
}
|
sys_chan_write(channel, buffer, strlen(buffer));
|
||||||
|
|
||||||
short cmd_gettime(short channel, int argc, char * argv[]) {
|
sprintf(buffer, "\nFPGA Model: %08X", info.fpga_model);
|
||||||
char time_string[128];
|
sys_chan_write(channel, buffer, strlen(buffer));
|
||||||
t_time time;
|
|
||||||
|
|
||||||
rtc_get_time(&time);
|
sprintf(buffer, "\nFPGA Version: %04X.%04X", info.fpga_version, info.fpga_subver);
|
||||||
sprintf(time_string, "%04d-%02d-%02d %02d:%02d:%02d\n", time.year, time.month, time.day, time.hour, time.minute, time.second);
|
sys_chan_write(channel, buffer, strlen(buffer));
|
||||||
print(channel, time_string);
|
|
||||||
|
|
||||||
return 0;
|
sprintf(buffer, "\nMCP version: v%02d.%02d.%04d\n", info.mcp_version, info.mcp_rev, info.mcp_build);
|
||||||
}
|
sys_chan_write(channel, buffer, strlen(buffer));
|
||||||
|
|
||||||
short atoi_n(char * text, short n) {
|
|
||||||
short result = 0;
|
|
||||||
short i;
|
|
||||||
|
|
||||||
for (i = 0; i < n; i++) {
|
|
||||||
result = result * 10;
|
|
||||||
result = result + (text[i] - '0');
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Set the date and time in the RTC
|
|
||||||
*
|
|
||||||
* SETTIME yyyy-mm-dd HH:MM:SS
|
|
||||||
*/
|
|
||||||
short cmd_settime(short screen, int argc, char * argv[]) {
|
|
||||||
char * date;
|
|
||||||
char * time
|
|
||||||
t_time date_time;
|
|
||||||
short i;
|
|
||||||
|
|
||||||
date_time.year = 2021;
|
|
||||||
date_time.month = 10;
|
|
||||||
date_time.day = 4;
|
|
||||||
date_time.hour = 9;
|
|
||||||
date_time.minute = 15;
|
|
||||||
date_time.second = 0;
|
|
||||||
date_time.is_24hours = 1;
|
|
||||||
date_time.is_pm = 0;
|
|
||||||
|
|
||||||
if (argc != 3) {
|
|
||||||
print(screen, "USAGE: SETTIME yyyy-mm-dd HH:MM:SS\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
date = argv[1];
|
|
||||||
time = argv[2];
|
|
||||||
|
|
||||||
/* Validate date is correct format */
|
|
||||||
|
|
||||||
for (i = 0; i < 10; i++) {
|
|
||||||
if ((i == 4) || (i == 7)) {
|
|
||||||
if (date[i] != '-') {
|
|
||||||
print(screen, "USAGE: SETTIME yyyy-mm-dd HH:MM:SS\n");
|
|
||||||
print(screen, " ^");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if ((date[i] < '0') || (date[i] > '9')) {
|
|
||||||
print(screen, "USAGE: SETTIME yyyy-mm-dd HH:MM:SS\n");
|
|
||||||
print(screen, " ^");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Validate time is correct format */
|
|
||||||
|
|
||||||
for (i = 0; i < 8; i++) {
|
|
||||||
if ((i == 2) || (i == 5)) {
|
|
||||||
if (time[i] != ':') {
|
|
||||||
print(screen, "USAGE: SETTIME yyyy-mm-dd HH:MM:SS\n");
|
|
||||||
print(screen, " ^");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if ((time[i] < '0') || (date[i] > '9')) {
|
|
||||||
print(screen, "USAGE: SETTIME yyyy-mm-dd HH:MM:SS\n");
|
|
||||||
print(screen, " ^");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
date_time.year = atoi_n(&date[0], 4);
|
|
||||||
date_time.month = atoi_n(&date[5], 2);
|
|
||||||
date_time.day = atoi_n(&date[8], 2);
|
|
||||||
date_time.hour = atoi_n(&time[0], 2);
|
|
||||||
date_time.minute = atoi_n(&time[3], 2);
|
|
||||||
date_time.second = atoi_n(&time[6], 2);
|
|
||||||
|
|
||||||
rtc_set_time(&date_time);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -275,10 +213,8 @@ short cli_exec(short channel, char * command, int argc, char * argv[]) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Built in command not found..
|
/* No built-in command that matched... try to run a binary file */
|
||||||
// TODO: search the current drive for an executable file
|
return cmd_run(channel, argc, argv);
|
||||||
sys_chan_write(channel, cmd_not_found, strlen(cmd_not_found));
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
char * strtok_r(char * source, const char * delimiter, char ** saveptr) {
|
char * strtok_r(char * source, const char * delimiter, char ** saveptr) {
|
||||||
|
@ -466,5 +402,6 @@ long cli_eval_number(const char * arg) {
|
||||||
// 0 on success, negative number on error
|
// 0 on success, negative number on error
|
||||||
//
|
//
|
||||||
short cli_init() {
|
short cli_init() {
|
||||||
|
cli_set_init();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "syscalls.h"
|
#include "syscalls.h"
|
||||||
|
@ -37,13 +38,11 @@ short cmd_diskread(short screen, int argc, char * argv[]) {
|
||||||
|
|
||||||
result = bdev_read(bdev_number, lba, buffer, 512);
|
result = bdev_read(bdev_number, lba, buffer, 512);
|
||||||
if (result < 512) {
|
if (result < 512) {
|
||||||
print(screen, "Unable to read sector: ");
|
err_print(screen, "Unable to read sector", result);
|
||||||
print_hex_32(screen, result);
|
|
||||||
print(screen, "\n");
|
|
||||||
return -2;
|
return -2;
|
||||||
}
|
}
|
||||||
|
|
||||||
dump_buffer(screen, buffer, 512);
|
dump_buffer(screen, buffer, 512, 1);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -79,9 +78,7 @@ short cmd_diskfill(short screen, int argc, char * argv[]) {
|
||||||
|
|
||||||
result = bdev_write(bdev_number, lba, buffer, 512);
|
result = bdev_write(bdev_number, lba, buffer, 512);
|
||||||
if (result < 512) {
|
if (result < 512) {
|
||||||
print(screen, "Unable to write sector: ");
|
err_print(screen, "Unable to write sector", result);
|
||||||
print_hex_32(screen, result);
|
|
||||||
print(screen, "\n");
|
|
||||||
return -2;
|
return -2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,80 +86,22 @@ short cmd_diskfill(short screen, int argc, char * argv[]) {
|
||||||
return cmd_diskread(screen, argc, argv);
|
return cmd_diskread(screen, argc, argv);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Test the IDE interface by reading the MBR
|
|
||||||
*/
|
|
||||||
short cmd_testide(short screen, int argc, char * argv[]) {
|
|
||||||
unsigned char buffer[512];
|
|
||||||
short i;
|
|
||||||
short scancode;
|
|
||||||
short n = 0;
|
|
||||||
|
|
||||||
while (1) {
|
|
||||||
n = bdev_read(BDEV_HDC, 0, buffer, 512);
|
|
||||||
if (n <= 0) {
|
|
||||||
log_num(LOG_ERROR, "Unable to read MBR: ", n);
|
|
||||||
return n;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < n; i++) {
|
|
||||||
if ((i % 16) == 0) {
|
|
||||||
print(screen, "\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
print_hex_8(screen, buffer[i]);
|
|
||||||
print(screen, " ");
|
|
||||||
}
|
|
||||||
|
|
||||||
print(screen, "\n\n");
|
|
||||||
|
|
||||||
if (kbdmo_getc_poll()) break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Test file creation
|
* Try to run a command from storage.
|
||||||
|
*
|
||||||
|
* Command name is in argv[0].
|
||||||
*/
|
*/
|
||||||
short cmd_testcreate(short screen, int argc, char * argv[]) {
|
|
||||||
short n;
|
|
||||||
|
|
||||||
if (argc > 1) {
|
|
||||||
short channel = fsys_open(argv[1], FA_CREATE_NEW | FA_WRITE);
|
|
||||||
if (channel >= 0) {
|
|
||||||
char * message = "Hello, world!\n";
|
|
||||||
n = chan_write(channel, message, strlen(message));
|
|
||||||
if (n <= 0) {
|
|
||||||
print(screen, "Unable to write to file: ");
|
|
||||||
print_hex_16(screen, n);
|
|
||||||
print(screen, "\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
fsys_close(channel);
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
} else {
|
|
||||||
print(screen, "Unable to open file: ");
|
|
||||||
print_hex_16(screen, channel);
|
|
||||||
print(screen, "\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
print(screen, "USAGE: TESTCREATE <path>\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
short cmd_run(short screen, int argc, char * argv[]) {
|
short cmd_run(short screen, int argc, char * argv[]) {
|
||||||
TRACE("cmd_run");
|
TRACE("cmd_run");
|
||||||
|
|
||||||
if (argc > 1) {
|
short result = proc_run(argv[0], argc, argv);
|
||||||
short result = proc_run(argv[1]);
|
if (result < 0) {
|
||||||
if (result < 0) {
|
err_print(screen, "Unable to execute file", result);
|
||||||
log_num(LOG_ERROR, "Unable to run: ", result);
|
return -1;
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -175,7 +114,7 @@ short cmd_mkdir(short screen, int argc, char * argv[]) {
|
||||||
if (argc > 1) {
|
if (argc > 1) {
|
||||||
short result = fsys_mkdir(argv[1]);
|
short result = fsys_mkdir(argv[1]);
|
||||||
if (result < 0) {
|
if (result < 0) {
|
||||||
log_num(LOG_ERROR, "Unable to create directory: ", result);
|
err_print(screen, "Unable to create directory", result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -194,7 +133,7 @@ short cmd_del(short screen, int argc, char * argv[]) {
|
||||||
if (argc > 1) {
|
if (argc > 1) {
|
||||||
short result = fsys_delete(argv[1]);
|
short result = fsys_delete(argv[1]);
|
||||||
if (result < 0) {
|
if (result < 0) {
|
||||||
log_num(LOG_ERROR, "Unable to delete: ", result);
|
err_print(screen, "Unable to delete file", result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -211,9 +150,9 @@ short cmd_cd(short screen, int argc, char * argv[]) {
|
||||||
TRACE("cmd_cd");
|
TRACE("cmd_cd");
|
||||||
|
|
||||||
if (argc > 1) {
|
if (argc > 1) {
|
||||||
short result = fsys_setcwd(argv[1]);
|
short result = fsys_set_cwd(argv[1]);
|
||||||
if (result < 0) {
|
if (result < 0) {
|
||||||
log_num(LOG_ERROR, "Unable to change directory: ", result);
|
err_print(screen, "Unable to change directory", result);
|
||||||
return result;
|
return result;
|
||||||
} else {
|
} else {
|
||||||
print(screen, "Changed to: ");
|
print(screen, "Changed to: ");
|
||||||
|
@ -236,9 +175,9 @@ short cmd_pwd(short screen, int argc, char * argv[]) {
|
||||||
|
|
||||||
TRACE("cmd_pwd");
|
TRACE("cmd_pwd");
|
||||||
|
|
||||||
short result = fsys_getcwd(buffer, 128);
|
short result = fsys_get_cwd(buffer, 128);
|
||||||
if (result < 0) {
|
if (result < 0) {
|
||||||
log_num(LOG_ERROR, "Unable to get directory: ", result);
|
err_print(screen, "Unable to get current directory", result);
|
||||||
return result;
|
return result;
|
||||||
} else {
|
} else {
|
||||||
print(screen, buffer);
|
print(screen, buffer);
|
||||||
|
@ -249,14 +188,14 @@ short cmd_pwd(short screen, int argc, char * argv[]) {
|
||||||
/*
|
/*
|
||||||
* Rename a file or directory
|
* Rename a file or directory
|
||||||
*/
|
*/
|
||||||
extern short cmd_rename(short screen, int argc, char * argv[]) {
|
short cmd_rename(short screen, int argc, char * argv[]) {
|
||||||
|
|
||||||
TRACE("cmd_rename");
|
TRACE("cmd_rename");
|
||||||
|
|
||||||
if (argc > 2) {
|
if (argc > 2) {
|
||||||
short result = fsys_rename(argv[1], argv[2]);
|
short result = fsys_rename(argv[1], argv[2]);
|
||||||
if (result < 0) {
|
if (result < 0) {
|
||||||
log_num(LOG_ERROR, "Unable to rename: ", result);
|
err_print(screen, "Unable to rename file", result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -271,13 +210,10 @@ short cmd_dir(short screen, int argc, char * argv[]) {
|
||||||
char * path = "";
|
char * path = "";
|
||||||
char label[40];
|
char label[40];
|
||||||
|
|
||||||
log_num(LOG_INFO, "cmd_dir: ", argc);
|
|
||||||
|
|
||||||
if (argc > 1) {
|
if (argc > 1) {
|
||||||
path = argv[1];
|
path = argv[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
log3(LOG_INFO, "Attempting to read directory for [", path, "]\n");
|
|
||||||
short dir = fsys_opendir(path);
|
short dir = fsys_opendir(path);
|
||||||
if (dir >= 0) {
|
if (dir >= 0) {
|
||||||
result = fsys_getlabel(path, label);
|
result = fsys_getlabel(path, label);
|
||||||
|
@ -313,7 +249,7 @@ short cmd_dir(short screen, int argc, char * argv[]) {
|
||||||
|
|
||||||
fsys_closedir(dir);
|
fsys_closedir(dir);
|
||||||
} else {
|
} else {
|
||||||
log_num(LOG_ERROR, "Could not open directory: ", dir);
|
err_print(screen, "Unable to open directory", dir);
|
||||||
return dir;
|
return dir;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -347,7 +283,7 @@ short cmd_type(short screen, int argc, char * argv[]) {
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
log_num(LOG_ERROR, "Could not open file for reading: ", fd);
|
err_print(screen, "Unable to open file", fd);
|
||||||
return fd;
|
return fd;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -377,7 +313,7 @@ short cmd_load(short screen, int argc, char * argv[]) {
|
||||||
log(LOG_INFO, "File loaded.");
|
log(LOG_INFO, "File loaded.");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
log_num(LOG_ERROR, "Unable to open file: ", result);
|
err_print(screen, "Unable to open file", result);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -399,8 +335,7 @@ short cmd_label(short screen, int argc, char * argv[]) {
|
||||||
short drive = cli_eval_number(argv[1]);
|
short drive = cli_eval_number(argv[1]);
|
||||||
short result = fsys_setlabel(drive, argv[2]);
|
short result = fsys_setlabel(drive, argv[2]);
|
||||||
if (result != 0) {
|
if (result != 0) {
|
||||||
print(screen, "Unable to set the label: ");
|
err_print(screen, "Unable to set volume label", result);
|
||||||
print_hex_16(screen, result);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -420,8 +355,7 @@ short cmd_format(short screen, int argc, char * argv[]) {
|
||||||
short drive = cli_eval_number(argv[1]);
|
short drive = cli_eval_number(argv[1]);
|
||||||
short result = fsys_mkfs(drive, "");
|
short result = fsys_mkfs(drive, "");
|
||||||
if (result != 0) {
|
if (result != 0) {
|
||||||
print(screen, "Unable to format the drive: ");
|
err_print(screen, "Unable to format volume", result);
|
||||||
print_hex_16(screen, result);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,16 +5,6 @@
|
||||||
#ifndef __DOS_CMDS_H
|
#ifndef __DOS_CMDS_H
|
||||||
#define __DOS_CMDS_H
|
#define __DOS_CMDS_H
|
||||||
|
|
||||||
/*
|
|
||||||
* Test the IDE interface by reading the MBR
|
|
||||||
*/
|
|
||||||
extern short cmd_testide(short screen, int argc, char * argv[]);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Test file creation
|
|
||||||
*/
|
|
||||||
extern short cmd_testcreate(short screen, int argc, char * argv[]);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Execute a binary file
|
* Execute a binary file
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -5,6 +5,8 @@
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "cli.h"
|
#include "cli.h"
|
||||||
#include "simpleio.h"
|
#include "simpleio.h"
|
||||||
|
#include "sys_general.h"
|
||||||
|
#include "syscalls.h"
|
||||||
#include "mem_cmds.h"
|
#include "mem_cmds.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -27,20 +29,7 @@ short mem_cmd_dump(short channel, int argc, char * argv[]) {
|
||||||
count = cli_eval_number(argv[2]);
|
count = cli_eval_number(argv[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
TRACE("foo");
|
dump_buffer(channel, address, count, 2);
|
||||||
|
|
||||||
for (i = 0; i < count; i++) {
|
|
||||||
if ((i % 16) == 0) {
|
|
||||||
print(channel, "\n");
|
|
||||||
print_hex_32(channel, ((long)address + i));
|
|
||||||
print(channel, ": ");
|
|
||||||
}
|
|
||||||
|
|
||||||
print_hex_8(channel, address[i]);
|
|
||||||
print(channel, " ");
|
|
||||||
}
|
|
||||||
|
|
||||||
print(channel, "\n");
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
|
|
515
src/cli/settings.c
Normal file
515
src/cli/settings.c
Normal file
|
@ -0,0 +1,515 @@
|
||||||
|
/*
|
||||||
|
* Mechanism for handling the SET command
|
||||||
|
*
|
||||||
|
* SET <setting name> <setting value>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "log.h"
|
||||||
|
#include "errors.h"
|
||||||
|
#include "settings.h"
|
||||||
|
#include "simpleio.h"
|
||||||
|
#include "syscalls.h"
|
||||||
|
#include "interrupt.h"
|
||||||
|
#include "rtc_reg.h"
|
||||||
|
#include "dev/rtc.h"
|
||||||
|
#include "dev/text_screen_iii.h"
|
||||||
|
#include "snd/codec.h"
|
||||||
|
#include "vicky_general.h"
|
||||||
|
|
||||||
|
#define MAX_SETTING_NAME 64
|
||||||
|
#define MAX_SETTING_HELP 80
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Structure to hold a setting
|
||||||
|
*/
|
||||||
|
typedef struct s_setting {
|
||||||
|
char name[MAX_SETTING_NAME]; /* Name of the setting (in upper case) */
|
||||||
|
char help[MAX_SETTING_HELP]; /* Help line for this setting */
|
||||||
|
cli_setter setter; /* The function to set the value of the setting */
|
||||||
|
cli_getter getter; /* The function to get the value of the setting */
|
||||||
|
struct s_setting * next; /* Pointer to the next registered setting */
|
||||||
|
} t_setting, *p_setting;
|
||||||
|
|
||||||
|
static p_setting cli_first_setting; /* Pointer to the first registered setting */
|
||||||
|
static p_setting cli_last_setting; /* Pointer to the last registered setting */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copy the name to a buffer as an upper case setting name
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* name_upper = pointer to the buffer of at least MAX_SETTING_NAME bytes to receive the copy
|
||||||
|
* name = the name to copy
|
||||||
|
*/
|
||||||
|
void cli_name_upper(char * name_upper, const char *name) {
|
||||||
|
short i;
|
||||||
|
|
||||||
|
for (i = 0; (i < MAX_SETTING_NAME) && (name[i] != 0); i++) {
|
||||||
|
name_upper[i] = toupper(name[i]);
|
||||||
|
}
|
||||||
|
name_upper[i] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Add a setting
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* name = the name of the setting
|
||||||
|
* setter = the function to change the value of the setting
|
||||||
|
* getter = the function to get the value of a setting
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, any other number is an error
|
||||||
|
*/
|
||||||
|
short cli_set_register(const char * name, const char * help, cli_setter setter, cli_getter getter) {
|
||||||
|
p_setting setting = (p_setting)malloc(sizeof(t_setting));
|
||||||
|
if (setting == 0) {
|
||||||
|
/* Could not allocate the setting record... return an error */
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
/* Set the fields for the setting */
|
||||||
|
cli_name_upper(setting->name, name);
|
||||||
|
strncpy(setting->help, help);
|
||||||
|
setting->setter = setter;
|
||||||
|
setting->getter = getter;
|
||||||
|
setting->next = 0;
|
||||||
|
|
||||||
|
if (cli_first_setting == 0) {
|
||||||
|
/* This is the first and last setting so far */
|
||||||
|
cli_first_setting = setting;
|
||||||
|
cli_last_setting = setting;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
/* This is the new last setting */
|
||||||
|
cli_last_setting->next = setting;
|
||||||
|
cli_last_setting = setting;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Return success */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Find the setting that matches the name (case insensitive search)
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* name = the setting name to find
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* pointer to the matching setting (0 if none found)
|
||||||
|
*/
|
||||||
|
p_setting cli_find_setting(const char * name) {
|
||||||
|
char name_upper[MAX_SETTING_NAME];
|
||||||
|
p_setting setting;
|
||||||
|
|
||||||
|
/* Convert the name to upper case */
|
||||||
|
cli_name_upper(name_upper, name);
|
||||||
|
|
||||||
|
/* Walk through the list of settings to find a name that matches */
|
||||||
|
for (setting = cli_first_setting; setting != 0; setting = setting->next) {
|
||||||
|
if (strcmp(setting->name, name_upper) == 0) {
|
||||||
|
/* Found the setting... */
|
||||||
|
return setting;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Didn't find the setting... */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set the value of a setting
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* name = the name of the setting to update (case insensitive)
|
||||||
|
* value = the value to store in the setting (may be interpreted by the setting)
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, any other number is an error
|
||||||
|
*/
|
||||||
|
short cli_set_value(short channel, const char * name, const char * value) {
|
||||||
|
p_setting setting = cli_find_setting(name);
|
||||||
|
if (setting == 0) {
|
||||||
|
/* Setting not found... */
|
||||||
|
return ERR_NOT_FOUND;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
/* Attempt to set the value, and return the results */
|
||||||
|
return setting->setter(channel, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get the value of a setting
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* name = the name of the setting to update (case insensitive)
|
||||||
|
* buffer = the place to copy a string representing the value of the setting
|
||||||
|
* size = the number of characters that can be stored in the buffer
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, any other number is an error
|
||||||
|
*/
|
||||||
|
short cli_get_value(short channel, const char * name, char * buffer, short size) {
|
||||||
|
p_setting setting = cli_find_setting(name);
|
||||||
|
if (setting == 0) {
|
||||||
|
/* Setting not found... */
|
||||||
|
return ERR_NOT_FOUND;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
/* Attempt to set the value, and return the results */
|
||||||
|
return setting->getter(channel, buffer, size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Print help information about the SET command
|
||||||
|
*/
|
||||||
|
void cli_set_help(short channel) {
|
||||||
|
char message[80];
|
||||||
|
p_setting setting;
|
||||||
|
|
||||||
|
sprintf(message, "SET/GET command supported settings:\n");
|
||||||
|
sys_chan_write(channel, message, strlen(message));
|
||||||
|
|
||||||
|
for (setting = cli_first_setting; setting != 0; setting = setting->next) {
|
||||||
|
sys_chan_write(channel, setting->help, strlen(setting->help));
|
||||||
|
sys_chan_write(channel, "\n", 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Command to set the value of a setting
|
||||||
|
*/
|
||||||
|
short cli_cmd_set(short channel, int argc, char * argv[]) {
|
||||||
|
char message[80];
|
||||||
|
short result;
|
||||||
|
|
||||||
|
if (argc == 3) {
|
||||||
|
result = cli_set_value(channel, argv[1], argv[2]);
|
||||||
|
if (result != 0) {
|
||||||
|
sprintf(message, "Unable to change setting: %s", sys_err_message(result));
|
||||||
|
sys_chan_write(channel, message, strlen(message));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
|
||||||
|
} else if ((argc == 2) && ((strcmp(argv[1], "HELP") == 0) || (strcmp(argv[1], "help") == 0) || (strcmp(argv[1], "?") == 0)) {
|
||||||
|
cli_set_help(channel);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
print(channel, "USAGE: SET <name> <value>\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Command to set the value of a setting
|
||||||
|
*/
|
||||||
|
short cli_cmd_get(short channel, int argc, char * argv[]) {
|
||||||
|
char buffer[128];
|
||||||
|
short result;
|
||||||
|
|
||||||
|
if (argc == 2) {
|
||||||
|
|
||||||
|
if ((strcmp(argv[1], "HELP") == 0) || (strcmp(argv[1], "help") == 0) || (strcmp(argv[1], "?") == 0)) {
|
||||||
|
cli_set_help(channel);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
result = cli_get_value(channel, argv[1], buffer, 128);
|
||||||
|
if (result == 0) {
|
||||||
|
print(channel, buffer);
|
||||||
|
print(channel, "\n");
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
sprintf(buffer, "Unable to get setting: %s", sys_err_message(result));
|
||||||
|
sys_chan_write(channel, buffer, strlen(buffer));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
print(channel, "USAGE: GET <name>\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SOF setter
|
||||||
|
*/
|
||||||
|
short cli_sof_set(short channel, const char * value) {
|
||||||
|
char message[80];
|
||||||
|
|
||||||
|
if (strcmp(value, "1") == 0) {
|
||||||
|
int_enable(INT_SOF_A);
|
||||||
|
sprintf(message, "Start Of Frame interrupt enabled.\n");
|
||||||
|
} else if (strcmp(value, "0") == 0) {
|
||||||
|
int_disable(INT_SOF_A);
|
||||||
|
sprintf(message, "Start Of Frame interrupt disabled.\n");
|
||||||
|
} else {
|
||||||
|
sprintf(message, "USAGE: SET SOF 0|1\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
sys_chan_write(channel, message, strlen(message));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SOF getter
|
||||||
|
*/
|
||||||
|
short cli_sof_get(short channel, char * buffer, short size) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* RTC setter
|
||||||
|
*/
|
||||||
|
short cli_rtc_set(short channel, const char * value) {
|
||||||
|
char message[80];
|
||||||
|
|
||||||
|
if (strcmp(value, "1") == 0) {
|
||||||
|
rtc_enable_ticks();
|
||||||
|
sprintf(message, "RTC interrupt enabled.\n");
|
||||||
|
|
||||||
|
} else if (strcmp(value, "0") == 0) {
|
||||||
|
int_disable(INT_RTC);
|
||||||
|
sprintf(message, "RTC interrupt disabled.\n");
|
||||||
|
|
||||||
|
} else {
|
||||||
|
sprintf(message, "USAGE: SET RTC 0|1\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
sys_chan_write(channel, message, strlen(message));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* RTC getter
|
||||||
|
*/
|
||||||
|
short cli_rtc_get(short channel, char * buffer, short size) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
short atoi_n(char * text, short n) {
|
||||||
|
short result = 0;
|
||||||
|
short i;
|
||||||
|
|
||||||
|
for (i = 0; i < n; i++) {
|
||||||
|
result = result * 10;
|
||||||
|
result = result + (text[i] - '0');
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* DATE setter
|
||||||
|
*/
|
||||||
|
short cli_date_set(short channel, const char * date) {
|
||||||
|
t_time date_time;
|
||||||
|
short i;
|
||||||
|
const char * usage = "USAGE: SET DATE yyyy-mm-dd\n";
|
||||||
|
|
||||||
|
rtc_get_time(&date_time);
|
||||||
|
date_time.is_24hours = 1;
|
||||||
|
date_time.is_pm = 0;
|
||||||
|
|
||||||
|
/* Validate date is correct format */
|
||||||
|
|
||||||
|
for (i = 0; i < 10; i++) {
|
||||||
|
if ((i == 4) || (i == 7)) {
|
||||||
|
if (date[i] != '-') {
|
||||||
|
sys_chan_write(channel, usage, strlen(usage));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if ((date[i] < '0') || (date[i] > '9')) {
|
||||||
|
sys_chan_write(channel, usage, strlen(usage));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
date_time.year = atoi_n(&date[0], 4);
|
||||||
|
date_time.month = atoi_n(&date[5], 2);
|
||||||
|
date_time.day = atoi_n(&date[8], 2);
|
||||||
|
|
||||||
|
rtc_set_time(&date_time);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* DATE getter
|
||||||
|
*/
|
||||||
|
short cli_date_get(short channel, char * value) {
|
||||||
|
t_time time;
|
||||||
|
|
||||||
|
rtc_get_time(&time);
|
||||||
|
sprintf(value, "%04d-%02d-%02d\n", time.year, time.month, time.day);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* TIME setter
|
||||||
|
*/
|
||||||
|
short cli_time_set(short channel, const char * time) {
|
||||||
|
t_time date_time;
|
||||||
|
short i;
|
||||||
|
const char * usage = "USAGE: SET TIME HH:MM:SS\n";
|
||||||
|
|
||||||
|
rtc_get_time(&date_time);
|
||||||
|
date_time.is_24hours = 1;
|
||||||
|
date_time.is_pm = 0;
|
||||||
|
|
||||||
|
/* Validate time is correct format */
|
||||||
|
|
||||||
|
for (i = 0; i < 8; i++) {
|
||||||
|
if ((i == 2) || (i == 5)) {
|
||||||
|
if (time[i] != ':') {
|
||||||
|
sys_chan_write(channel, usage, strlen(usage));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if ((time[i] < '0') || (time[i] > '9')) {
|
||||||
|
sys_chan_write(channel, usage, strlen(usage));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
date_time.hour = atoi_n(&time[0], 2);
|
||||||
|
date_time.minute = atoi_n(&time[3], 2);
|
||||||
|
date_time.second = atoi_n(&time[6], 2);
|
||||||
|
|
||||||
|
rtc_set_time(&date_time);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* TIME getter
|
||||||
|
*/
|
||||||
|
short cli_time_get(short channel, char * value) {
|
||||||
|
t_time time;
|
||||||
|
|
||||||
|
rtc_get_time(&time);
|
||||||
|
sprintf(value, "%02d:%02d:%02d\n", time.hour, time.minute, time.second);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Font setter -- SET FONT <path>
|
||||||
|
*/
|
||||||
|
short cli_font_set(short screen, const char * value) {
|
||||||
|
/* Open the file */
|
||||||
|
short chan = fsys_open(value, 0x01);
|
||||||
|
if (chan > 0) {
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < 8 * 256; i++) {
|
||||||
|
short b = sys_chan_read_b(chan);
|
||||||
|
if (b >= 0) {
|
||||||
|
VICKY_TXT_FONT_A[i] = (unsigned char)b;
|
||||||
|
} else {
|
||||||
|
char message[80];
|
||||||
|
|
||||||
|
/* Reset the text screen */
|
||||||
|
text_init();
|
||||||
|
fsys_close(chan);
|
||||||
|
|
||||||
|
sprintf(message, "Unable to read font file: %d\n", b);
|
||||||
|
sys_chan_write(screen, message, strlen(message));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fsys_close(chan);
|
||||||
|
} else {
|
||||||
|
print(screen, "Could not load font file.\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Font setter -- GET FONT <path>
|
||||||
|
*/
|
||||||
|
short cli_font_get(short channel, char * value) {
|
||||||
|
/* We don't keep the font path */
|
||||||
|
*value = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Volume setter -- SET VOLUME <value>
|
||||||
|
*/
|
||||||
|
short cli_volume_set(short channel, char * value) {
|
||||||
|
unsigned char volume = (unsigned char)cli_eval_number(value);
|
||||||
|
codec_set_volume(volume);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Volume getter -- GET VOLUME
|
||||||
|
*/
|
||||||
|
short cli_volume_get(short channel, char * value) {
|
||||||
|
sprintf(value, "%d", codec_get_volume());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set the keyboard layout given a keyboard layout file -- SET LAYOUT <path>
|
||||||
|
*/
|
||||||
|
short cli_layout_set(short channel, const char * value) {
|
||||||
|
short result, fd;
|
||||||
|
char buffer[1024]; /* Temporary storage for the translation tables */
|
||||||
|
|
||||||
|
/* Try to open the file */
|
||||||
|
fd = sys_fsys_open(value, 1);
|
||||||
|
if (fd >= 0) {
|
||||||
|
/* Try to read the data */
|
||||||
|
result = sys_chan_read(fd, buffer, 1024);
|
||||||
|
|
||||||
|
if (result > 0) {
|
||||||
|
/* If we got something, set the layout */
|
||||||
|
result = sys_kbd_layout(buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
sys_fsys_close(fd);
|
||||||
|
return result;
|
||||||
|
} else {
|
||||||
|
return fd;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get the keyboard layout given a keyboard layout file -- GET LAYOUT
|
||||||
|
*/
|
||||||
|
short cli_layout_get(short channel, char * value) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initialize the settings tables
|
||||||
|
*/
|
||||||
|
void cli_set_init() {
|
||||||
|
cli_first_setting = 0;
|
||||||
|
cli_last_setting = 0;
|
||||||
|
|
||||||
|
cli_set_register("DATE", "DATE yyyy-mm-dd -- set the date in the realtime clock", cli_date_set, cli_date_get);
|
||||||
|
// cli_set_register("RTC", "RTC 1|0 -- Enable or disable the realtime clock interrupt", cli_rtc_set, cli_rtc_get);
|
||||||
|
// cli_set_register("SOF", "SOF 1|0 -- Enable or disable the Start of Frame interrupt", cli_sof_set, cli_sof_get);
|
||||||
|
cli_set_register("FONT", "FONT <path> -- set a font for the display", cli_font_set, cli_font_get);
|
||||||
|
cli_set_register("KEYBOARD", "KEYBOARD <path> -- set the keyboard layout", cli_layout_set, cli_layout_get);
|
||||||
|
cli_set_register("TIME", "TIME HH:MM:SS -- set the time in the realtime clock", cli_time_set, cli_time_get);
|
||||||
|
cli_set_register("VOLUME", "VOLUME <0 - 255> -- set the master volume", cli_volume_set, cli_volume_get);
|
||||||
|
}
|
69
src/cli/settings.h
Normal file
69
src/cli/settings.h
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
/*
|
||||||
|
* Mechanism for handling the SET command
|
||||||
|
*
|
||||||
|
* SET <setting name> <setting value>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __SETTINGS_H
|
||||||
|
#define __SETTINGS_H
|
||||||
|
|
||||||
|
/* Pointer to a function to set a value */
|
||||||
|
typedef short (*cli_setter)(short, const char *);
|
||||||
|
|
||||||
|
/* Pointer to a function to get a value */
|
||||||
|
typedef short (*cli_getter)(short, char * buffer, short size);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initialize the settings tables
|
||||||
|
*/
|
||||||
|
extern void cli_set_init();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Add a setting
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* name = the name of the setting
|
||||||
|
* setter = the function to change the value of the setting
|
||||||
|
* getter = the function to get the value of a setting
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, any other number is an error
|
||||||
|
*/
|
||||||
|
extern short cli_set_register(const char * name, cli_setter setter, cli_getter getter);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set the value of a setting
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* name = the name of the setting to update (case insensitive)
|
||||||
|
* value = the value to store in the setting (may be interpreted by the setting)
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, any other number is an error
|
||||||
|
*/
|
||||||
|
extern short cli_set_value(const char * name, const char * value);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get the value of a setting
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* name = the name of the setting to update (case insensitive)
|
||||||
|
* buffer = the place to copy a string representing the value of the setting
|
||||||
|
* size = the number of characters that can be stored in the buffer
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, any other number is an error
|
||||||
|
*/
|
||||||
|
extern short cli_get_value(const char * name, char * buffer, short size);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Command to set the value of a setting
|
||||||
|
*/
|
||||||
|
extern short cli_cmd_set(short screen, int argc, char * argv[]);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Command to set the value of a setting
|
||||||
|
*/
|
||||||
|
extern short cli_cmd_get(short screen, int argc, char * argv[]);
|
||||||
|
|
||||||
|
#endif
|
503
src/cli/sound_cmds.c
Normal file
503
src/cli/sound_cmds.c
Normal file
|
@ -0,0 +1,503 @@
|
||||||
|
/*
|
||||||
|
* Commands to work with the sound devices
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "timers.h"
|
||||||
|
#include "sound_cmds.h"
|
||||||
|
#include "sound_reg.h"
|
||||||
|
#include "snd/psg.h"
|
||||||
|
#include "snd/opl2.h"
|
||||||
|
#include "dev/midi.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Play a sound on the PSG
|
||||||
|
*/
|
||||||
|
short psg_test(short channel, int argc, char * argv[]) {
|
||||||
|
int i;
|
||||||
|
long target_time;
|
||||||
|
|
||||||
|
psg_tone(0, 34923);
|
||||||
|
psg_attenuation(0, 0);
|
||||||
|
|
||||||
|
target_time = sys_time_jiffies() + 6;
|
||||||
|
while (target_time > sys_time_jiffies()) ;
|
||||||
|
|
||||||
|
psg_tone(1, 44000);
|
||||||
|
psg_attenuation(1, 0);
|
||||||
|
|
||||||
|
target_time = sys_time_jiffies() + 6;
|
||||||
|
while (target_time > sys_time_jiffies()) ;
|
||||||
|
|
||||||
|
psg_tone(2, 52325);
|
||||||
|
psg_attenuation(2, 0);
|
||||||
|
|
||||||
|
target_time = sys_time_jiffies() + 60;
|
||||||
|
while (target_time > sys_time_jiffies()) ;
|
||||||
|
|
||||||
|
psg_attenuation(0, 15);
|
||||||
|
psg_tone(0, 0);
|
||||||
|
psg_attenuation(1, 15);
|
||||||
|
psg_tone(1, 0);
|
||||||
|
psg_attenuation(2, 15);
|
||||||
|
psg_tone(2, 0);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
const unsigned char opl3_tone_on[] = {
|
||||||
|
0x01,0x00, /* initialise */
|
||||||
|
0x05,0x01, /* OPL3 mode, necessary for stereo */
|
||||||
|
0xc0,0x31, /* both channel, parallel connection */
|
||||||
|
|
||||||
|
/* Carrier settings
|
||||||
|
* no amplitude modulation (D7=0), no vibrato (D6=0)
|
||||||
|
* sustained envelope type (D5=1), KSR=0 (D4=0)
|
||||||
|
* frequency multiplier=1 (D4-D0=1) */
|
||||||
|
0x23,0x21,
|
||||||
|
/* no volume decrease with pitch (D7-D6=0)
|
||||||
|
* no attenuation (D5-D0=0) */
|
||||||
|
0x43,0x00,
|
||||||
|
/* fast attack (D7-D4=0xF) and decay (D3-D0=0xF) */
|
||||||
|
0x63,0xff,
|
||||||
|
/* high sustain level (D7-D4=0), slow release rate (D3-D0=5) */
|
||||||
|
0x83,0x05,
|
||||||
|
|
||||||
|
/* Modulator settings
|
||||||
|
* sustained envelope type, frequency multiplier=0 */
|
||||||
|
0x20,0x20,
|
||||||
|
/* maximum attenuation, no volume decrease with pitch */
|
||||||
|
0x40,0x3f,
|
||||||
|
/* Since the modulator signal is attenuated as much as possible, these
|
||||||
|
* next two values shouldn't have any effect. */
|
||||||
|
0x60,0x44,
|
||||||
|
0x80,0x05,
|
||||||
|
|
||||||
|
/* 440Hz */
|
||||||
|
0xa0,0x41,
|
||||||
|
|
||||||
|
/* block 0, key on */
|
||||||
|
0xb0,0x32,
|
||||||
|
|
||||||
|
/* end of sequence marker */
|
||||||
|
0xff
|
||||||
|
};
|
||||||
|
|
||||||
|
const unsigned char opl3_tone_off[] = {
|
||||||
|
/* block 0, key off */
|
||||||
|
0xb0,0x00,
|
||||||
|
|
||||||
|
/* end of sequence marker */
|
||||||
|
0xff
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Play a sound on the OPL3
|
||||||
|
*/
|
||||||
|
short opl3_test(short channel, int argc, char * argv[]) {
|
||||||
|
short i;
|
||||||
|
unsigned char reg;
|
||||||
|
unsigned char data;
|
||||||
|
long target_time;
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
while (1) {
|
||||||
|
reg = opl3_tone_on[i++];
|
||||||
|
if (reg == 0xff) {
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
data = opl3_tone_on[i++];
|
||||||
|
OPL3_PORT[reg] = data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
target_time = sys_time_jiffies() + 60;
|
||||||
|
while (target_time > sys_time_jiffies()) ;
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
while (1) {
|
||||||
|
reg = opl3_tone_off[i++];
|
||||||
|
if (reg == 0xff) {
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
data = opl3_tone_off[i++];
|
||||||
|
OPL3_PORT[reg] = data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Perform a transmit test on the MIDI ports
|
||||||
|
*/
|
||||||
|
short midi_tx_test(short channel, int argc, char * argv[]) {
|
||||||
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
|
const char note_on[] = { 0x90, 0x3c, 0xff };
|
||||||
|
const char note_off[] = { 0x80, 0x3c, 0x00 };
|
||||||
|
char message[80];
|
||||||
|
unsigned short scancode = 0;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
midi_init();
|
||||||
|
|
||||||
|
for (i = 0; i < 3; i++) {
|
||||||
|
midi_put(note_on[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < 65535 * 20; i++) ;
|
||||||
|
|
||||||
|
for (i = 0; i < 3; i++) {
|
||||||
|
midi_put(note_off[i]);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Perform a receive test on the MIDI ports
|
||||||
|
*/
|
||||||
|
short midi_rx_test(short channel, int argc, char * argv[]) {
|
||||||
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
|
char message[80];
|
||||||
|
unsigned short scancode = 0;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
midi_init();
|
||||||
|
|
||||||
|
sprintf(message, "Press '1' to start, and 'ESC' to exit test.\n");
|
||||||
|
sys_chan_write(channel, message, strlen(message));
|
||||||
|
|
||||||
|
while (sys_kbd_scancode() != 0x02) ;
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
while (scancode != 0x01) {
|
||||||
|
unsigned char input = midi_get_poll();
|
||||||
|
if ((input != 0xf8) && (input != 0xfe)) {
|
||||||
|
if ((i % 16) == 0) {
|
||||||
|
sprintf(message, "\n%02X", input);
|
||||||
|
sys_chan_write(channel, message, strlen(message));
|
||||||
|
} else {
|
||||||
|
sprintf(message, " %02X", input);
|
||||||
|
sys_chan_write(channel, message, strlen(message));
|
||||||
|
}
|
||||||
|
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
scancode = sys_kbd_scancode();
|
||||||
|
}
|
||||||
|
|
||||||
|
sys_chan_write(channel, "\n", 1);
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Perform a loopback test on the MIDI ports
|
||||||
|
*/
|
||||||
|
short midi_loop_test(short channel, int argc, char * argv[]) {
|
||||||
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
|
char message[80];
|
||||||
|
unsigned short scancode = 0;
|
||||||
|
unsigned char output;
|
||||||
|
|
||||||
|
midi_init();
|
||||||
|
|
||||||
|
sprintf(message, "Plug a MIDI loopback cable between MIDI IN and MIDI OUT.\nThen press '1' to start.\n");
|
||||||
|
sys_chan_write(channel, message, strlen(message));
|
||||||
|
|
||||||
|
sprintf(message, "Press ESC to exit test.\n");
|
||||||
|
sys_chan_write(channel, message, strlen(message));
|
||||||
|
|
||||||
|
while (sys_kbd_scancode() != 0x02) ;
|
||||||
|
|
||||||
|
output = 1;
|
||||||
|
while (scancode != 0x01) {
|
||||||
|
sprintf(message, "Sending: ");
|
||||||
|
sys_chan_write(channel, message, strlen(message));
|
||||||
|
midi_put(output);
|
||||||
|
sprintf(message, "%02X --> ", output);
|
||||||
|
sys_chan_write(channel, message, strlen(message));
|
||||||
|
|
||||||
|
unsigned char input = midi_get_poll();
|
||||||
|
sprintf(message, "%02X\n", input);
|
||||||
|
sys_chan_write(channel, message, strlen(message));
|
||||||
|
|
||||||
|
scancode = sys_kbd_scancode();
|
||||||
|
|
||||||
|
output++;
|
||||||
|
if (output > 0xfe) {
|
||||||
|
output = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sys_chan_write(channel, "\n", 1);
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Test the OPL2
|
||||||
|
*/
|
||||||
|
short opl2_test(short channel, int argc, char * argv[]) {
|
||||||
|
unsigned char i;
|
||||||
|
|
||||||
|
OPN2_INT_BASE[OPN2_22_LFO] = 0; /* LFO off */
|
||||||
|
OPN2_INT_BASE[OPN2_27_CHANEL_3_MODE] = 0; /* chanel 3 in normal mode */
|
||||||
|
|
||||||
|
/* switch off all chanal */
|
||||||
|
for (i = 0; i < 7; i++) {
|
||||||
|
OPN2_INT_BASE[OPN2_28_KEY_ON_OFF] = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ADC off */
|
||||||
|
OPN2_INT_BASE[OPN2_2B_ADC_EN] = 0;
|
||||||
|
|
||||||
|
/* DT1/MUL */
|
||||||
|
OPN2_INT_BASE[OPN2_30_ADSR__DT1_MUL__CH1_OP1] = 0x71;
|
||||||
|
OPN2_INT_BASE[OPN2_31_ADSR__DT1_MUL__CH2_OP1] = 0x71;
|
||||||
|
OPN2_INT_BASE[OPN2_32_ADSR__DT1_MUL__CH3_OP1] = 0x71;
|
||||||
|
OPN2_INT_BASE[OPN2_30_ADSR__DT1_MUL__CH1_OP5] = 0x71;
|
||||||
|
OPN2_INT_BASE[OPN2_31_ADSR__DT1_MUL__CH2_OP5] = 0x71;
|
||||||
|
OPN2_INT_BASE[OPN2_32_ADSR__DT1_MUL__CH3_OP5] = 0x71;
|
||||||
|
|
||||||
|
OPN2_INT_BASE[OPN2_34_ADSR__DT1_MUL__CH1_OP2] = 0x0D;
|
||||||
|
OPN2_INT_BASE[OPN2_35_ADSR__DT1_MUL__CH2_OP2] = 0x0D;
|
||||||
|
OPN2_INT_BASE[OPN2_36_ADSR__DT1_MUL__CH3_OP2] = 0x0D;
|
||||||
|
OPN2_INT_BASE[OPN2_34_ADSR__DT1_MUL__CH1_OP6] = 0x0D;
|
||||||
|
OPN2_INT_BASE[OPN2_35_ADSR__DT1_MUL__CH2_OP6] = 0x0D;
|
||||||
|
OPN2_INT_BASE[OPN2_36_ADSR__DT1_MUL__CH3_OP6] = 0x0D;
|
||||||
|
|
||||||
|
OPN2_INT_BASE[OPN2_38_ADSR__DT1_MUL__CH1_OP3] = 0x33;
|
||||||
|
OPN2_INT_BASE[OPN2_39_ADSR__DT1_MUL__CH2_OP3] = 0x33;
|
||||||
|
OPN2_INT_BASE[OPN2_3A_ADSR__DT1_MUL__CH3_OP3] = 0x33;
|
||||||
|
OPN2_INT_BASE[OPN2_38_ADSR__DT1_MUL__CH1_OP7] = 0x33;
|
||||||
|
OPN2_INT_BASE[OPN2_39_ADSR__DT1_MUL__CH2_OP7] = 0x33;
|
||||||
|
OPN2_INT_BASE[OPN2_3A_ADSR__DT1_MUL__CH3_OP7] = 0x33;
|
||||||
|
|
||||||
|
OPN2_INT_BASE[OPN2_3C_ADSR__DT1_MUL__CH1_OP4] = 0x01;
|
||||||
|
OPN2_INT_BASE[OPN2_3D_ADSR__DT1_MUL__CH2_OP4] = 0x01;
|
||||||
|
OPN2_INT_BASE[OPN2_3E_ADSR__DT1_MUL__CH3_OP4] = 0x01;
|
||||||
|
OPN2_INT_BASE[OPN2_3C_ADSR__DT1_MUL__CH1_OP8] = 0x01;
|
||||||
|
OPN2_INT_BASE[OPN2_3D_ADSR__DT1_MUL__CH2_OP8] = 0x01;
|
||||||
|
OPN2_INT_BASE[OPN2_3E_ADSR__DT1_MUL__CH3_OP8] = 0x01;
|
||||||
|
|
||||||
|
/* Total Level */
|
||||||
|
OPN2_INT_BASE[OPN2_40_ADSR__LT__CH1_OP1] = 0x23;
|
||||||
|
OPN2_INT_BASE[OPN2_41_ADSR__LT__CH2_OP1] = 0x23;
|
||||||
|
OPN2_INT_BASE[OPN2_42_ADSR__LT__CH3_OP1] = 0x23;
|
||||||
|
OPN2_INT_BASE[OPN2_40_ADSR__LT__CH1_OP5] = 0x23;
|
||||||
|
OPN2_INT_BASE[OPN2_41_ADSR__LT__CH2_OP5] = 0x23;
|
||||||
|
OPN2_INT_BASE[OPN2_42_ADSR__LT__CH3_OP5] = 0x23;
|
||||||
|
|
||||||
|
OPN2_INT_BASE[OPN2_44_ADSR__LT__CH1_OP2] = 0x2D;
|
||||||
|
OPN2_INT_BASE[OPN2_45_ADSR__LT__CH2_OP2] = 0x2D;
|
||||||
|
OPN2_INT_BASE[OPN2_46_ADSR__LT__CH3_OP2] = 0x2D;
|
||||||
|
OPN2_INT_BASE[OPN2_44_ADSR__LT__CH1_OP6] = 0x2D;
|
||||||
|
OPN2_INT_BASE[OPN2_45_ADSR__LT__CH2_OP6] = 0x2D;
|
||||||
|
OPN2_INT_BASE[OPN2_46_ADSR__LT__CH3_OP6] = 0x2D;
|
||||||
|
|
||||||
|
OPN2_INT_BASE[OPN2_48_ADSR__LT__CH1_OP3] = 0x26;
|
||||||
|
OPN2_INT_BASE[OPN2_49_ADSR__LT__CH2_OP3] = 0x26;
|
||||||
|
OPN2_INT_BASE[OPN2_4A_ADSR__LT__CH3_OP3] = 0x26;
|
||||||
|
OPN2_INT_BASE[OPN2_48_ADSR__LT__CH1_OP7] = 0x26;
|
||||||
|
OPN2_INT_BASE[OPN2_49_ADSR__LT__CH2_OP7] = 0x26;
|
||||||
|
OPN2_INT_BASE[OPN2_4A_ADSR__LT__CH3_OP7] = 0x26;
|
||||||
|
|
||||||
|
OPN2_INT_BASE[OPN2_4C_ADSR__LT__CH1_OP4] = 0x00;
|
||||||
|
OPN2_INT_BASE[OPN2_4D_ADSR__LT__CH2_OP4] = 0x00;
|
||||||
|
OPN2_INT_BASE[OPN2_4E_ADSR__LT__CH3_OP4] = 0x00;
|
||||||
|
OPN2_INT_BASE[OPN2_4C_ADSR__LT__CH1_OP8] = 0x00;
|
||||||
|
OPN2_INT_BASE[OPN2_4D_ADSR__LT__CH2_OP8] = 0x00;
|
||||||
|
OPN2_INT_BASE[OPN2_4E_ADSR__LT__CH3_OP8] = 0x00;
|
||||||
|
|
||||||
|
/* RS/AR */
|
||||||
|
|
||||||
|
OPN2_INT_BASE[OPN2_50_ADSR__SR_AR__CH1_OP1] = 0x5F;
|
||||||
|
OPN2_INT_BASE[OPN2_51_ADSR__SR_AR__CH2_OP1] = 0x5F;
|
||||||
|
OPN2_INT_BASE[OPN2_52_ADSR__SR_AR__CH3_OP1] = 0x5F;
|
||||||
|
OPN2_INT_BASE[OPN2_50_ADSR__SR_AR__CH1_OP5] = 0x5F;
|
||||||
|
OPN2_INT_BASE[OPN2_51_ADSR__SR_AR__CH2_OP5] = 0x5F;
|
||||||
|
OPN2_INT_BASE[OPN2_52_ADSR__SR_AR__CH3_OP5] = 0x5F;
|
||||||
|
|
||||||
|
OPN2_INT_BASE[OPN2_54_ADSR__SR_AR__CH1_OP2] = 0x99;
|
||||||
|
OPN2_INT_BASE[OPN2_55_ADSR__SR_AR__CH2_OP2] = 0x99;
|
||||||
|
OPN2_INT_BASE[OPN2_56_ADSR__SR_AR__CH3_OP2] = 0x99;
|
||||||
|
OPN2_INT_BASE[OPN2_54_ADSR__SR_AR__CH1_OP6] = 0x99;
|
||||||
|
OPN2_INT_BASE[OPN2_55_ADSR__SR_AR__CH2_OP6] = 0x99;
|
||||||
|
OPN2_INT_BASE[OPN2_56_ADSR__SR_AR__CH3_OP6] = 0x99;
|
||||||
|
|
||||||
|
OPN2_INT_BASE[OPN2_58_ADSR__SR_AR__CH1_OP3] = 0x5F;
|
||||||
|
OPN2_INT_BASE[OPN2_59_ADSR__SR_AR__CH2_OP3] = 0x5F;
|
||||||
|
OPN2_INT_BASE[OPN2_5A_ADSR__SR_AR__CH3_OP3] = 0x5F;
|
||||||
|
OPN2_INT_BASE[OPN2_58_ADSR__SR_AR__CH1_OP7] = 0x5F;
|
||||||
|
OPN2_INT_BASE[OPN2_59_ADSR__SR_AR__CH2_OP7] = 0x5F;
|
||||||
|
OPN2_INT_BASE[OPN2_5A_ADSR__SR_AR__CH3_OP7] = 0x5F;
|
||||||
|
|
||||||
|
OPN2_INT_BASE[OPN2_5C_ADSR__SR_AR__CH1_OP4] = 0x94;
|
||||||
|
OPN2_INT_BASE[OPN2_5D_ADSR__SR_AR__CH2_OP4] = 0x94;
|
||||||
|
OPN2_INT_BASE[OPN2_5E_ADSR__SR_AR__CH3_OP4] = 0x94;
|
||||||
|
OPN2_INT_BASE[OPN2_5C_ADSR__SR_AR__CH1_OP8] = 0x94;
|
||||||
|
OPN2_INT_BASE[OPN2_5D_ADSR__SR_AR__CH2_OP8] = 0x94;
|
||||||
|
OPN2_INT_BASE[OPN2_5E_ADSR__SR_AR__CH3_OP8] = 0x94;
|
||||||
|
|
||||||
|
/* AM/D1R */
|
||||||
|
|
||||||
|
OPN2_INT_BASE[OPN2_60_ADSR__AM_D1R__CH1_OP1] = 0x07;
|
||||||
|
OPN2_INT_BASE[OPN2_61_ADSR__AM_D1R__CH2_OP1] = 0x07;
|
||||||
|
OPN2_INT_BASE[OPN2_62_ADSR__AM_D1R__CH3_OP1] = 0x07;
|
||||||
|
OPN2_INT_BASE[OPN2_60_ADSR__AM_D1R__CH1_OP5] = 0x07;
|
||||||
|
OPN2_INT_BASE[OPN2_61_ADSR__AM_D1R__CH2_OP5] = 0x07;
|
||||||
|
OPN2_INT_BASE[OPN2_62_ADSR__AM_D1R__CH3_OP5] = 0x07;
|
||||||
|
|
||||||
|
OPN2_INT_BASE[OPN2_64_ADSR__AM_D1R__CH1_OP2] = 0x07;
|
||||||
|
OPN2_INT_BASE[OPN2_65_ADSR__AM_D1R__CH2_OP2] = 0x07;
|
||||||
|
OPN2_INT_BASE[OPN2_66_ADSR__AM_D1R__CH3_OP2] = 0x07;
|
||||||
|
OPN2_INT_BASE[OPN2_64_ADSR__AM_D1R__CH1_OP6] = 0x07;
|
||||||
|
OPN2_INT_BASE[OPN2_65_ADSR__AM_D1R__CH2_OP6] = 0x07;
|
||||||
|
OPN2_INT_BASE[OPN2_66_ADSR__AM_D1R__CH3_OP6] = 0x07;
|
||||||
|
|
||||||
|
OPN2_INT_BASE[OPN2_68_ADSR__AM_D1R__CH1_OP3] = 0x05;
|
||||||
|
OPN2_INT_BASE[OPN2_69_ADSR__AM_D1R__CH2_OP3] = 0x05;
|
||||||
|
OPN2_INT_BASE[OPN2_6A_ADSR__AM_D1R__CH3_OP3] = 0x05;
|
||||||
|
OPN2_INT_BASE[OPN2_68_ADSR__AM_D1R__CH1_OP7] = 0x05;
|
||||||
|
OPN2_INT_BASE[OPN2_69_ADSR__AM_D1R__CH2_OP7] = 0x05;
|
||||||
|
OPN2_INT_BASE[OPN2_6A_ADSR__AM_D1R__CH3_OP7] = 0x05;
|
||||||
|
|
||||||
|
OPN2_INT_BASE[OPN2_6C_ADSR__AM_D1R__CH1_OP4] = 0x07;
|
||||||
|
OPN2_INT_BASE[OPN2_6D_ADSR__AM_D1R__CH2_OP4] = 0x07;
|
||||||
|
OPN2_INT_BASE[OPN2_6E_ADSR__AM_D1R__CH3_OP4] = 0x07;
|
||||||
|
OPN2_INT_BASE[OPN2_6C_ADSR__AM_D1R__CH1_OP8] = 0x07;
|
||||||
|
OPN2_INT_BASE[OPN2_6D_ADSR__AM_D1R__CH2_OP8] = 0x07;
|
||||||
|
OPN2_INT_BASE[OPN2_6E_ADSR__AM_D1R__CH3_OP8] = 0x07;
|
||||||
|
|
||||||
|
|
||||||
|
/* D2R */
|
||||||
|
|
||||||
|
OPN2_INT_BASE[OPN2_70_ADSR__D2R__CH1_OP1] = 0x02;
|
||||||
|
OPN2_INT_BASE[OPN2_71_ADSR__D2R__CH2_OP1] = 0x02;
|
||||||
|
OPN2_INT_BASE[OPN2_72_ADSR__D2R__CH3_OP1] = 0x02;
|
||||||
|
OPN2_INT_BASE[OPN2_70_ADSR__D2R__CH1_OP5] = 0x02;
|
||||||
|
OPN2_INT_BASE[OPN2_71_ADSR__D2R__CH2_OP5] = 0x02;
|
||||||
|
OPN2_INT_BASE[OPN2_72_ADSR__D2R__CH3_OP5] = 0x02;
|
||||||
|
|
||||||
|
OPN2_INT_BASE[OPN2_74_ADSR__D2R__CH1_OP2] = 0x02;
|
||||||
|
OPN2_INT_BASE[OPN2_75_ADSR__D2R__CH2_OP2] = 0x02;
|
||||||
|
OPN2_INT_BASE[OPN2_76_ADSR__D2R__CH3_OP2] = 0x02;
|
||||||
|
OPN2_INT_BASE[OPN2_74_ADSR__D2R__CH1_OP6] = 0x02;
|
||||||
|
OPN2_INT_BASE[OPN2_75_ADSR__D2R__CH2_OP6] = 0x02;
|
||||||
|
OPN2_INT_BASE[OPN2_76_ADSR__D2R__CH3_OP6] = 0x02;
|
||||||
|
|
||||||
|
OPN2_INT_BASE[OPN2_78_ADSR__D2R__CH1_OP3] = 0x02;
|
||||||
|
OPN2_INT_BASE[OPN2_79_ADSR__D2R__CH2_OP3] = 0x02;
|
||||||
|
OPN2_INT_BASE[OPN2_7A_ADSR__D2R__CH3_OP3] = 0x02;
|
||||||
|
OPN2_INT_BASE[OPN2_78_ADSR__D2R__CH1_OP7] = 0x02;
|
||||||
|
OPN2_INT_BASE[OPN2_79_ADSR__D2R__CH2_OP7] = 0x02;
|
||||||
|
OPN2_INT_BASE[OPN2_7A_ADSR__D2R__CH3_OP7] = 0x02;
|
||||||
|
|
||||||
|
OPN2_INT_BASE[OPN2_7C_ADSR__D2R__CH1_OP4] = 0x02;
|
||||||
|
OPN2_INT_BASE[OPN2_7D_ADSR__D2R__CH2_OP4] = 0x02;
|
||||||
|
OPN2_INT_BASE[OPN2_7E_ADSR__D2R__CH3_OP4] = 0x02;
|
||||||
|
OPN2_INT_BASE[OPN2_7C_ADSR__D2R__CH1_OP8] = 0x02;
|
||||||
|
OPN2_INT_BASE[OPN2_7D_ADSR__D2R__CH2_OP8] = 0x02;
|
||||||
|
OPN2_INT_BASE[OPN2_7E_ADSR__D2R__CH3_OP8] = 0x02;
|
||||||
|
|
||||||
|
/* D1L/RR */
|
||||||
|
|
||||||
|
OPN2_INT_BASE[OPN2_80_ADSR__D1L_RR__CH1_OP1] = 0x11;
|
||||||
|
OPN2_INT_BASE[OPN2_81_ADSR__D1L_RR__CH2_OP1] = 0x11;
|
||||||
|
OPN2_INT_BASE[OPN2_82_ADSR__D1L_RR__CH3_OP1] = 0x11;
|
||||||
|
OPN2_INT_BASE[OPN2_80_ADSR__D1L_RR__CH1_OP5] = 0x11;
|
||||||
|
OPN2_INT_BASE[OPN2_81_ADSR__D1L_RR__CH2_OP5] = 0x11;
|
||||||
|
OPN2_INT_BASE[OPN2_82_ADSR__D1L_RR__CH3_OP5] = 0x11;
|
||||||
|
|
||||||
|
OPN2_INT_BASE[OPN2_84_ADSR__D1L_RR__CH1_OP2] = 0x11;
|
||||||
|
OPN2_INT_BASE[OPN2_85_ADSR__D1L_RR__CH2_OP2] = 0x11;
|
||||||
|
OPN2_INT_BASE[OPN2_86_ADSR__D1L_RR__CH3_OP2] = 0x11;
|
||||||
|
OPN2_INT_BASE[OPN2_84_ADSR__D1L_RR__CH1_OP6] = 0x11;
|
||||||
|
OPN2_INT_BASE[OPN2_85_ADSR__D1L_RR__CH2_OP6] = 0x11;
|
||||||
|
OPN2_INT_BASE[OPN2_86_ADSR__D1L_RR__CH3_OP6] = 0x11;
|
||||||
|
|
||||||
|
OPN2_INT_BASE[OPN2_88_ADSR__D1L_RR__CH1_OP3] = 0x11;
|
||||||
|
OPN2_INT_BASE[OPN2_89_ADSR__D1L_RR__CH2_OP3] = 0x11;
|
||||||
|
OPN2_INT_BASE[OPN2_8A_ADSR__D1L_RR__CH3_OP3] = 0x11;
|
||||||
|
OPN2_INT_BASE[OPN2_88_ADSR__D1L_RR__CH1_OP7] = 0x11;
|
||||||
|
OPN2_INT_BASE[OPN2_89_ADSR__D1L_RR__CH2_OP7] = 0x11;
|
||||||
|
OPN2_INT_BASE[OPN2_8A_ADSR__D1L_RR__CH3_OP7] = 0x11;
|
||||||
|
|
||||||
|
OPN2_INT_BASE[OPN2_8C_ADSR__D1L_RR__CH1_OP4] = 0xA6;
|
||||||
|
OPN2_INT_BASE[OPN2_8D_ADSR__D1L_RR__CH2_OP4] = 0xA6;
|
||||||
|
OPN2_INT_BASE[OPN2_8E_ADSR__D1L_RR__CH3_OP4] = 0xA6;
|
||||||
|
OPN2_INT_BASE[OPN2_8C_ADSR__D1L_RR__CH1_OP8] = 0xA6;
|
||||||
|
OPN2_INT_BASE[OPN2_8D_ADSR__D1L_RR__CH2_OP8] = 0xA6;
|
||||||
|
OPN2_INT_BASE[OPN2_8E_ADSR__D1L_RR__CH3_OP8] = 0xA6;
|
||||||
|
|
||||||
|
/* Proprietary */
|
||||||
|
|
||||||
|
OPN2_INT_BASE[OPN2_90_ADSR__D1L_RR__CH1_OP1] = 0x00;
|
||||||
|
OPN2_INT_BASE[OPN2_91_ADSR__D1L_RR__CH2_OP1] = 0x00;
|
||||||
|
OPN2_INT_BASE[OPN2_92_ADSR__D1L_RR__CH3_OP1] = 0x00;
|
||||||
|
OPN2_INT_BASE[OPN2_90_ADSR__D1L_RR__CH4_OP1] = 0x00;
|
||||||
|
OPN2_INT_BASE[OPN2_91_ADSR__D1L_RR__CH5_OP1] = 0x00;
|
||||||
|
OPN2_INT_BASE[OPN2_92_ADSR__D1L_RR__CH6_OP1] = 0x00;
|
||||||
|
|
||||||
|
OPN2_INT_BASE[OPN2_94_ADSR__D1L_RR__CH1_OP2] = 0x00;
|
||||||
|
OPN2_INT_BASE[OPN2_95_ADSR__D1L_RR__CH2_OP2] = 0x00;
|
||||||
|
OPN2_INT_BASE[OPN2_96_ADSR__D1L_RR__CH3_OP2] = 0x00;
|
||||||
|
OPN2_INT_BASE[OPN2_94_ADSR__D1L_RR__CH4_OP2] = 0x00;
|
||||||
|
OPN2_INT_BASE[OPN2_95_ADSR__D1L_RR__CH5_OP2] = 0x00;
|
||||||
|
OPN2_INT_BASE[OPN2_96_ADSR__D1L_RR__CH6_OP2] = 0x00;
|
||||||
|
|
||||||
|
OPN2_INT_BASE[OPN2_98_ADSR__D1L_RR__CH1_OP3] = 0x00;
|
||||||
|
OPN2_INT_BASE[OPN2_99_ADSR__D1L_RR__CH2_OP3] = 0x00;
|
||||||
|
OPN2_INT_BASE[OPN2_9A_ADSR__D1L_RR__CH3_OP3] = 0x00;
|
||||||
|
OPN2_INT_BASE[OPN2_98_ADSR__D1L_RR__CH4_OP3] = 0x00;
|
||||||
|
OPN2_INT_BASE[OPN2_99_ADSR__D1L_RR__CH5_OP3] = 0x00;
|
||||||
|
OPN2_INT_BASE[OPN2_9A_ADSR__D1L_RR__CH6_OP3] = 0x00;
|
||||||
|
|
||||||
|
OPN2_INT_BASE[OPN2_9C_ADSR__D1L_RR__CH1_OP4] = 0x00;
|
||||||
|
OPN2_INT_BASE[OPN2_9D_ADSR__D1L_RR__CH2_OP4] = 0x00;
|
||||||
|
OPN2_INT_BASE[OPN2_9E_ADSR__D1L_RR__CH3_OP4] = 0x00;
|
||||||
|
OPN2_INT_BASE[OPN2_9C_ADSR__D1L_RR__CH4_OP4] = 0x00;
|
||||||
|
OPN2_INT_BASE[OPN2_9D_ADSR__D1L_RR__CH5_OP4] = 0x00;
|
||||||
|
OPN2_INT_BASE[OPN2_9E_ADSR__D1L_RR__CH6_OP4] = 0x00;
|
||||||
|
|
||||||
|
|
||||||
|
/* Feedback/algorithm */
|
||||||
|
OPN2_INT_BASE[OPN2_B0_CH1_FEEDBACK_ALGO] = 0x32;
|
||||||
|
OPN2_INT_BASE[OPN2_B1_CH2_FEEDBACK_ALGO] = 0x32;
|
||||||
|
OPN2_INT_BASE[OPN2_B2_CH3_FEEDBACK_ALGO] = 0x32;
|
||||||
|
|
||||||
|
/* Both speakers on */
|
||||||
|
OPN2_INT_BASE[OPN2_B4_CH1_L_R_AMS_FMS] = 0xC0;
|
||||||
|
OPN2_INT_BASE[OPN2_B5_CH2_L_R_AMS_FMS] = 0xC0;
|
||||||
|
OPN2_INT_BASE[OPN2_B6_CH3_L_R_AMS_FMS] = 0xC0;
|
||||||
|
|
||||||
|
/* Set frequency */
|
||||||
|
OPN2_INT_BASE[OPN2_A4_CH1_OCTAVE_FRECANCY_H] = 0x23;
|
||||||
|
OPN2_INT_BASE[OPN2_A5_CH2_OCTAVE_FRECANCY_H] = 0x22;
|
||||||
|
OPN2_INT_BASE[OPN2_A6_CH3_OCTAVE_FRECANCY_H] = 0x22;
|
||||||
|
|
||||||
|
OPN2_INT_BASE[OPN2_A0_CH1_FRECANCY_L] = 0x96;
|
||||||
|
OPN2_INT_BASE[OPN2_A1_CH2_FRECANCY_L] = 0x96;
|
||||||
|
OPN2_INT_BASE[OPN2_A2_CH3_FRECANCY_L] = 0x24;
|
||||||
|
|
||||||
|
/* Key off */
|
||||||
|
OPN2_INT_BASE[OPN2_28_KEY_ON_OFF] = 0x00;
|
||||||
|
|
||||||
|
|
||||||
|
for (i = 0xF0; i < 0xF7; i++) {
|
||||||
|
OPN2_INT_BASE[OPN2_28_KEY_ON_OFF] = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
long target_ticks = sys_time_jiffies();
|
||||||
|
while (target_ticks > sys_time_jiffies() + 300) ;
|
||||||
|
|
||||||
|
for (i = 0x00; i < 0x07; i++) {
|
||||||
|
OPN2_INT_BASE[OPN2_28_KEY_ON_OFF] = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
38
src/cli/sound_cmds.h
Normal file
38
src/cli/sound_cmds.h
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
/*
|
||||||
|
* Commands to work with the sound devices
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __SOUND_CMDS_H
|
||||||
|
#define __SOUND_CMDS_H
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Play a sound on the PSG
|
||||||
|
*/
|
||||||
|
extern short psg_test(short channel, int argc, char * argv[]);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Play a sound on the OPL3
|
||||||
|
*/
|
||||||
|
extern short opl3_test(short channel, int argc, char * argv[]);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Test the OPL2
|
||||||
|
*/
|
||||||
|
extern short opl2_test(short channel, int argc, char * argv[]);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Perform a transmit test on the MIDI ports
|
||||||
|
*/
|
||||||
|
extern short midi_tx_test(short channel, int argc, char * argv[]);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Perform a receive test on the MIDI ports
|
||||||
|
*/
|
||||||
|
extern short midi_rx_test(short channel, int argc, char * argv[]);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Perform a loopback test on the MIDI ports
|
||||||
|
*/
|
||||||
|
extern short midi_loop_test(short channel, int argc, char * argv[]);
|
||||||
|
|
||||||
|
#endif
|
385
src/cli/test_cmd2.c
Normal file
385
src/cli/test_cmd2.c
Normal file
|
@ -0,0 +1,385 @@
|
||||||
|
/*
|
||||||
|
* Test commands
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "cli.h"
|
||||||
|
#include "cli/test_cmds.h"
|
||||||
|
#include "cli/sound_cmds.h"
|
||||||
|
#include "dev/block.h"
|
||||||
|
#include "dev/channel.h"
|
||||||
|
#include "dev/fsys.h"
|
||||||
|
#include "dev/lpt.h"
|
||||||
|
#include "dev/rtc.h"
|
||||||
|
#include "dev/uart.h"
|
||||||
|
#include "fatfs/ff.h"
|
||||||
|
#include "interrupt.h"
|
||||||
|
#include "rtc_reg.h"
|
||||||
|
#include "simpleio.h"
|
||||||
|
#include "syscalls.h"
|
||||||
|
#include "sys_general.h"
|
||||||
|
#include "uart_reg.h"
|
||||||
|
#include "vicky_general.h"
|
||||||
|
|
||||||
|
#define LPT_DATA_PORT ((volatile unsigned char *)0x00C02378)
|
||||||
|
|
||||||
|
#define LPT_STAT_PORT ((volatile unsigned char *)0x00C02379)
|
||||||
|
#define LPT_STAT_BUSY 0x80
|
||||||
|
#define LPT_STAT_ACK 0x40
|
||||||
|
#define LPT_STAT_PO 0x20
|
||||||
|
#define LPT_STAT_SELECT 0x10
|
||||||
|
#define LPT_STAT_ERROR 0x08
|
||||||
|
#define LPT_STAT_IRQ 0x04
|
||||||
|
|
||||||
|
#define LPT_CTRL_PORT ((volatile unsigned char *)0x00C0237A)
|
||||||
|
#define LPT_CTRL_STROBE 0x01
|
||||||
|
#define LPT_CTRL_AL 0x02
|
||||||
|
#define LPT_CTRL_INIT 0x04
|
||||||
|
#define LPT_CTRL_SELECT 0x08
|
||||||
|
#define LPT_CTRL_IRQE 0x10
|
||||||
|
#define LPT_CTRL_BI 0x20
|
||||||
|
|
||||||
|
#define LPT_INIT_ON 0x08 /* Start the printer initialization process */
|
||||||
|
#define LPT_INIT_OFF 0x0C /* Stop the printer initialization process */
|
||||||
|
#define LPT_STROBE_ON 0x0F /* Strobe the printer */
|
||||||
|
#define LPT_STROBE_OFF 0x0E /* Drop the strobe to the printer */
|
||||||
|
|
||||||
|
typedef struct s_cli_test_feature {
|
||||||
|
const char * name;
|
||||||
|
const char * help;
|
||||||
|
cli_cmd_handler handler;
|
||||||
|
} t_cli_test_feature, * p_cli_test_feature;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Tests...
|
||||||
|
*/
|
||||||
|
|
||||||
|
short cli_test_bitmap(short channel, int argc, char * argv[]) {
|
||||||
|
int i,m,p;
|
||||||
|
unsigned char j;
|
||||||
|
unsigned short k;
|
||||||
|
|
||||||
|
*MasterControlReg_A = VKY3_MCR_BITMAP_EN | VKY3_MCR_GRAPH_EN; // Enable bitmap graphics
|
||||||
|
*BM0_Control_Reg = 0x00000001; // Enable BM0
|
||||||
|
*BM0_Addy_Pointer_Reg = 0x00000000; //Pointing to Starting of VRAM Bank A
|
||||||
|
// *BorderControlReg_L = 0x00000800; // Enable
|
||||||
|
k = 0;
|
||||||
|
for (i = 0; i< 256; i++) {
|
||||||
|
LUT_0[4*i] = i;
|
||||||
|
LUT_0[4*i+1] = i;
|
||||||
|
LUT_0[4*i+2] = i;
|
||||||
|
LUT_0[4*i+3] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i< 640 * 480; i++) {
|
||||||
|
VRAM_Bank0[i] = i & 0xff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
short cli_test_uart(short channel, int argc, char * argv[]) {
|
||||||
|
char c;
|
||||||
|
char buffer[80];
|
||||||
|
|
||||||
|
uart_init(0);
|
||||||
|
uart_setbps(0, UART_115200);
|
||||||
|
uart_setlcr(0, LCR_DATABITS_8 | LCR_STOPBIT_1 | LCR_PARITY_NONE);
|
||||||
|
|
||||||
|
sprintf(buffer, "COM1: 115200, no parity, 1 stop bit, 8 data bits\nPress ESC to finish (%d).\n", UART_115200);
|
||||||
|
sys_chan_write(0, buffer, strlen(buffer));
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
c = kbd_getc();
|
||||||
|
if (c != 0) {
|
||||||
|
if (c == 0x1b) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
uart_put(0, c);
|
||||||
|
} else if (uart_has_bytes(0)) {
|
||||||
|
c = uart_get(0);
|
||||||
|
sys_chan_write_b(channel, c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
short cli_test_panic(short channel, int argc, char * argv[]) {
|
||||||
|
volatile int x = 0;
|
||||||
|
return argc / x;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Try using the RTC periodic interrupt in polled mode
|
||||||
|
*/
|
||||||
|
short cli_test_rtc(short channel, int argc, char * argv[]) {
|
||||||
|
char buffer[80];
|
||||||
|
char * spinner = "|/-\\";
|
||||||
|
short count = 0;
|
||||||
|
long ticks;
|
||||||
|
|
||||||
|
*RTC_RATES = 0x0e; /* Periodic interrupt rate: 250 ms */
|
||||||
|
*RTC_ENABLES = RTC_PIE; /* Turn on the periodic interrupt */
|
||||||
|
int_enable(INT_RTC);
|
||||||
|
|
||||||
|
ticks = sys_time_jiffies();
|
||||||
|
|
||||||
|
sprintf(buffer, "Waiting for updated ticks starting from %d\n", ticks);
|
||||||
|
sys_chan_write(channel, buffer, strlen(buffer));
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
if (ticks < sys_time_jiffies()) {
|
||||||
|
/* We got the periodic interrupt */
|
||||||
|
|
||||||
|
sprintf(buffer, "Tick! %d\n", ticks);
|
||||||
|
sys_chan_write(channel, buffer, strlen(buffer));
|
||||||
|
|
||||||
|
ticks = sys_time_jiffies();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Test the memory
|
||||||
|
*/
|
||||||
|
short cli_mem_test(short channel, int argc, char * argv[]) {
|
||||||
|
volatile unsigned char * memory = 0x00000000;
|
||||||
|
t_sys_info sys_info;
|
||||||
|
const long mem_start = 0x00050000;
|
||||||
|
long mem_end;
|
||||||
|
char message[80];
|
||||||
|
long i;
|
||||||
|
|
||||||
|
sys_get_info(&sys_info);
|
||||||
|
mem_end = sys_info.system_ram_size;
|
||||||
|
|
||||||
|
sprintf(message, "\x1B[H\x1B[2JTesting memory...");
|
||||||
|
sys_chan_write(channel, message, strlen(message));
|
||||||
|
|
||||||
|
for (i = mem_start; i < mem_end; i++) {
|
||||||
|
memory[i] = 0x55;
|
||||||
|
if (memory[i] != 0x55) {
|
||||||
|
sprintf(message, "\x1B[1;2H\x1B[KFailed to write 0x55... read %02X at %08X\n\n", memory[i], i);
|
||||||
|
sys_chan_write(channel, message, strlen(message));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
memory[i] = 0xAA;
|
||||||
|
if (memory[i] != 0xAA) {
|
||||||
|
sprintf(message, "\x1B[1;2H\x1B[KFailed to write 0xAA... read %02X at %08X\n\n", memory[i], i);
|
||||||
|
sys_chan_write(channel, message, strlen(message));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
memory[i] = 0x00;
|
||||||
|
if (memory[i] != 0x00) {
|
||||||
|
sprintf(message, "\x1B[1;2H\x1B[KFailed to write 0x00... read %02X at %08\n\nX", memory[i], i);
|
||||||
|
sys_chan_write(channel, message, strlen(message));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((i % 1024) == 0) {
|
||||||
|
sprintf(message, "\x1B[H\x1B[0KMemory tested: %08X", i);
|
||||||
|
sys_chan_write(channel, message, strlen(message));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sprintf(message, "\x1B[H\x1B[2JMemory passed basic tests.\n\n");
|
||||||
|
sys_chan_write(channel, message, strlen(message));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Test the IDE interface by reading the MBR
|
||||||
|
*/
|
||||||
|
short cli_test_ide(short screen, int argc, char * argv[]) {
|
||||||
|
unsigned char buffer[512];
|
||||||
|
short i;
|
||||||
|
short scancode;
|
||||||
|
short n = 0;
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
n = bdev_read(BDEV_HDC, 0, buffer, 512);
|
||||||
|
if (n <= 0) {
|
||||||
|
err_print(screen, "Unable to read MBR", n);
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
dump_buffer(screen, buffer, 512, 1);
|
||||||
|
|
||||||
|
print(screen, "\n\n");
|
||||||
|
|
||||||
|
scancode = sys_kbd_scancode();
|
||||||
|
if (scancode == 0x01) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Test file creation
|
||||||
|
*/
|
||||||
|
short cli_test_create(short screen, int argc, char * argv[]) {
|
||||||
|
short n;
|
||||||
|
|
||||||
|
if (argc > 1) {
|
||||||
|
short channel = fsys_open(argv[1], FA_CREATE_NEW | FA_WRITE);
|
||||||
|
if (channel >= 0) {
|
||||||
|
char * message = "Hello, world!\n";
|
||||||
|
n = chan_write(channel, message, strlen(message));
|
||||||
|
if (n <= 0) {
|
||||||
|
err_print(screen, "Unable to write to file", n);
|
||||||
|
}
|
||||||
|
|
||||||
|
fsys_close(channel);
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
err_print(screen, "Unable to open to file", channel);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
print(screen, "USAGE: TEST CREATE <path>\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
short cli_test_lpt(short screen, int argc, char * argv[]) {
|
||||||
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
|
char message[80];
|
||||||
|
unsigned char scancode;
|
||||||
|
|
||||||
|
sprintf(message, "Test parallel port:\nF1: DATA=00 F2: DATA=FF F3: STRB=1 F4: STRB=0\n");
|
||||||
|
sys_chan_write(screen, message, strlen(message));
|
||||||
|
sprintf(message, "F5: INIT=1 F6: INIT=0 F7: SEL=1 F8: SEL=0\nESC: Quit");
|
||||||
|
sys_chan_write(screen, message, strlen(message));
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
scancode = sys_kbd_scancode();
|
||||||
|
switch (scancode) {
|
||||||
|
case 0x3B: /* F1 */
|
||||||
|
*LPT_DATA_PORT = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x3C: /* F2 */
|
||||||
|
*LPT_DATA_PORT = 0xff;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x3D: /* F3 */
|
||||||
|
*LPT_CTRL_PORT = LPT_CTRL_STROBE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x3E: /* F4 */
|
||||||
|
*LPT_CTRL_PORT = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x3F: /* F5 */
|
||||||
|
*LPT_CTRL_PORT = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x40: /* F6 */
|
||||||
|
*LPT_CTRL_PORT = LPT_CTRL_INIT;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x41: /* F7 */
|
||||||
|
*LPT_CTRL_PORT = LPT_CTRL_SELECT;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x42: /* F8 */
|
||||||
|
*LPT_CTRL_PORT = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x1B: /* ESC */
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
short cmd_test_print(short screen, int argc, char * argv[]) {
|
||||||
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
|
const char * test_pattern = "0123456789ABCDEFGHIJKLMNOPQRTSUVWZXYZ\r\n";
|
||||||
|
|
||||||
|
char message[80];
|
||||||
|
unsigned short scancode = 0;
|
||||||
|
|
||||||
|
sprintf(message, "Initializing printer...\n");
|
||||||
|
sys_chan_write(screen, message, strlen(message));
|
||||||
|
|
||||||
|
lpt_initialize();
|
||||||
|
|
||||||
|
sprintf(message, "Sending test patterns to printer (ESC to quit)...\n");
|
||||||
|
sys_chan_write(screen, message, strlen(message));
|
||||||
|
|
||||||
|
while (scancode != 0x01) {
|
||||||
|
scancode = sys_kbd_scancode();
|
||||||
|
lpt_write(0, test_pattern, strlen(test_pattern));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static t_cli_test_feature cli_test_features[] = {
|
||||||
|
{"BITMAP", "BITMAP: test the bitmap screen", cli_test_bitmap},
|
||||||
|
{"CREATE", "CREATE <path>: test creating a file", cli_test_create},
|
||||||
|
{"IDE", "IDE: test reading the MBR of the IDE drive", cli_test_ide},
|
||||||
|
{"PANIC", "PANIC: test the kernel panic mechanism", cli_test_panic},
|
||||||
|
{"LPT", "LPT: test the parallel port", cli_test_lpt},
|
||||||
|
{"MEM", "MEM: test reading and writing memory", cli_mem_test},
|
||||||
|
{"MIDILOOP", "MIDILOOP: perform a loopback test on the MIDI ports", midi_loop_test},
|
||||||
|
{"MIDIRX", "MIDIRX: perform a receive test on the MIDI ports", midi_rx_test},
|
||||||
|
{"MIDITX", "MIDITX: send a note to a MIDI keyboard", midi_tx_test},
|
||||||
|
{"OPL2", "OPL2: test the OPL2 sound chip", opl2_test},
|
||||||
|
{"OPL3", "OPL3: test the OPL3 sound chip", opl3_test},
|
||||||
|
{"PSG", "PSG: test the PSG sound chip", psg_test},
|
||||||
|
{"PRINT", "PRINT: sent text to the printer", cmd_test_print},
|
||||||
|
{"UART", "UART: test the serial port", cli_test_uart},
|
||||||
|
{0, 0}
|
||||||
|
};
|
||||||
|
|
||||||
|
void test_help(short screen) {
|
||||||
|
p_cli_test_feature f;
|
||||||
|
|
||||||
|
print(screen, "USAGE: TEST <feature>\nFeatures supported...\n");
|
||||||
|
|
||||||
|
for (f = cli_test_features; f->name != 0; f++) {
|
||||||
|
print(screen, f->help);
|
||||||
|
print(screen, "\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Test command
|
||||||
|
*/
|
||||||
|
short cmd_test(short screen, int argc, char * argv[]) {
|
||||||
|
short i;
|
||||||
|
p_cli_test_feature f;
|
||||||
|
|
||||||
|
if (argc > 1) {
|
||||||
|
char feature_upcase[80];
|
||||||
|
|
||||||
|
/* Make an upper case copy of the feature to test */
|
||||||
|
strncpy(feature_upcase, argv[1], 80);
|
||||||
|
for (i = 0; i < strlen(feature_upcase); i++) {
|
||||||
|
feature_upcase[i] = toupper(feature_upcase[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (f = cli_test_features; f->name != 0; f++) {
|
||||||
|
if (strcmp(f->name, feature_upcase) == 0) {
|
||||||
|
f->handler(screen, argc - 1, &argv[1]);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
test_help(screen);
|
||||||
|
return -1;
|
||||||
|
} else {
|
||||||
|
test_help(screen);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
13
src/cli/test_cmds.h
Normal file
13
src/cli/test_cmds.h
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
/*
|
||||||
|
* Test commands
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __TEST_CMDS_H
|
||||||
|
#define __TEST_CMDS_H
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Test command
|
||||||
|
*/
|
||||||
|
extern short cmd_test(short channel, int argc, char * argv[]);
|
||||||
|
|
||||||
|
#endif
|
|
@ -1,5 +1,3 @@
|
||||||
override CFLAGS = +../../vbcc/config/m68k-foenix -I. -I.. -I../include
|
|
||||||
|
|
||||||
csources = $(wildcard *.c)
|
csources = $(wildcard *.c)
|
||||||
cobjects = $(subst .c,.o,$(csources))
|
cobjects = $(subst .c,.o,$(csources))
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,8 @@
|
||||||
#define MAX_ANSI_ARGS 10
|
#define MAX_ANSI_ARGS 10
|
||||||
|
|
||||||
#define CON_CTRL_ANSI 0x80 /* Set to enable ANSI escape processing */
|
#define CON_CTRL_ANSI 0x80 /* Set to enable ANSI escape processing */
|
||||||
|
#define CON_IOCTRL_ANSI_ON 0x01 /* IOCTRL Command: turn on ANSI terminal codes */
|
||||||
|
#define CON_IOCTRL_ANSI_OFF 0x02 /* IOCTRL Command: turn off ANSI terminal codes */
|
||||||
|
|
||||||
typedef void (*ansi_handler)(p_channel, short, short[]);
|
typedef void (*ansi_handler)(p_channel, short, short[]);
|
||||||
|
|
||||||
|
@ -39,6 +41,7 @@ typedef struct s_console_data {
|
||||||
unsigned char control; /* Control flags for the console: e.g. process ANSI codes */
|
unsigned char control; /* Control flags for the console: e.g. process ANSI codes */
|
||||||
unsigned char ansi_buffer_count; /* Number of characters in the ANSI BUFFER */
|
unsigned char ansi_buffer_count; /* Number of characters in the ANSI BUFFER */
|
||||||
char ansi_buffer[ANSI_BUFFER_SIZE]; /* Used to keep track of characters in the ANSI escape sequences */
|
char ansi_buffer[ANSI_BUFFER_SIZE]; /* Used to keep track of characters in the ANSI escape sequences */
|
||||||
|
char key_buffer; /* Used to peek at keyboard input */
|
||||||
} t_console_data, *p_console_data;
|
} t_console_data, *p_console_data;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -66,9 +69,9 @@ extern void ansi_sgr(p_channel chan, short arg_count, short args[]);
|
||||||
const t_ansi_seq ansi_sequence[] = {
|
const t_ansi_seq ansi_sequence[] = {
|
||||||
{ '@', ansi_ich },
|
{ '@', ansi_ich },
|
||||||
{ 'A', ansi_cuu },
|
{ 'A', ansi_cuu },
|
||||||
{ 'B', ansi_cuf },
|
{ 'B', ansi_cud },
|
||||||
{ 'C', ansi_cub },
|
{ 'C', ansi_cuf },
|
||||||
{ 'D', ansi_cud },
|
{ 'D', ansi_cub },
|
||||||
{ 'J', ansi_ed },
|
{ 'J', ansi_ed },
|
||||||
{ 'K', ansi_el },
|
{ 'K', ansi_el },
|
||||||
{ 'P', ansi_dch },
|
{ 'P', ansi_dch },
|
||||||
|
@ -425,6 +428,7 @@ short con_open(p_channel chan, uint8_t * path, short mode) {
|
||||||
for (i = 0; i < ANSI_BUFFER_SIZE; i++) {
|
for (i = 0; i < ANSI_BUFFER_SIZE; i++) {
|
||||||
con_data->ansi_buffer[i] = 0;
|
con_data->ansi_buffer[i] = 0;
|
||||||
}
|
}
|
||||||
|
con_data->key_buffer = 0;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -485,20 +489,41 @@ short con_write_b(p_channel chan, uint8_t b) {
|
||||||
* Attempt to read from the keyboard.
|
* Attempt to read from the keyboard.
|
||||||
*/
|
*/
|
||||||
short con_read_b(p_channel chan) {
|
short con_read_b(p_channel chan) {
|
||||||
|
p_console_data con_data;
|
||||||
|
|
||||||
|
/* Check to see if we need to process ANSI codes */
|
||||||
|
con_data = &(chan->data);
|
||||||
|
|
||||||
char c;
|
char c;
|
||||||
do {
|
do {
|
||||||
|
if (con_data->key_buffer != 0) {
|
||||||
|
c = con_data->key_buffer;
|
||||||
|
con_data->key_buffer = 0;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
#ifdef KBD_POLLED
|
#ifdef KBD_POLLED
|
||||||
ps2_mouse_get_packet();
|
ps2_mouse_get_packet();
|
||||||
c = kbdmo_getc_poll();
|
c = kbdmo_getc_poll();
|
||||||
#else
|
#else
|
||||||
c = kbdmo_getc();
|
c = kbdmo_getc();
|
||||||
#endif
|
#endif
|
||||||
|
#else
|
||||||
|
#ifdef KBD_POLLED
|
||||||
|
c = kbd_getc_poll();
|
||||||
|
#else
|
||||||
|
c = kbd_getc();
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
} while (c == 0);
|
} while (c == 0);
|
||||||
|
|
||||||
// Echo the character to the screen
|
// Echo the character to the screen
|
||||||
con_write_b(chan, c);
|
con_write_b(chan, c);
|
||||||
|
|
||||||
return c;
|
return (short)(c & 0x00ff);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -595,13 +620,58 @@ short con_write(p_channel chan, const uint8_t * buffer, short size) {
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
short con_has_input(p_channel chan) {
|
||||||
|
p_console_data con_data;
|
||||||
|
char c;
|
||||||
|
|
||||||
|
/* Check to see if we need to process ANSI codes */
|
||||||
|
con_data = &(chan->data);
|
||||||
|
|
||||||
|
if (con_data->key_buffer != 0) {
|
||||||
|
/* If we already peeked and have a character... return true */
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
/* Otherwise, peek at the keyboard to see if there is a valid key */
|
||||||
|
|
||||||
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
|
#ifdef KBD_POLLED
|
||||||
|
ps2_mouse_get_packet();
|
||||||
|
c = kbdmo_getc_poll();
|
||||||
|
#else
|
||||||
|
c = kbdmo_getc();
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#ifdef KBD_POLLED
|
||||||
|
c = kbd_getc_poll();
|
||||||
|
#else
|
||||||
|
c = kbd_getc();
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (c == 0) {
|
||||||
|
/* No: return false */
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
/* Yes: save the key we got and return true */
|
||||||
|
con_data->key_buffer = c;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Return the status of the console
|
// Return the status of the console
|
||||||
//
|
//
|
||||||
short con_status(p_channel chan) {
|
short con_status(p_channel chan) {
|
||||||
// TODO: make CDEV_STAT_READABLE conditional
|
short status = CDEV_STAT_WRITABLE; /* The console is always writable */
|
||||||
|
if (con_has_input(chan)) {
|
||||||
|
/* If there is data available, flag that it's readable */
|
||||||
|
status |= CDEV_STAT_READABLE;
|
||||||
|
}
|
||||||
|
|
||||||
return CDEV_STAT_READABLE | CDEV_STAT_WRITABLE;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -612,6 +682,25 @@ short con_seek(p_channel chan, long position, short base) {
|
||||||
}
|
}
|
||||||
|
|
||||||
short con_ioctrl(p_channel chan, short command, uint8_t * buffer, short size) {
|
short con_ioctrl(p_channel chan, short command, uint8_t * buffer, short size) {
|
||||||
|
p_console_data con_data;
|
||||||
|
|
||||||
|
/* Check to see if we need to process ANSI codes */
|
||||||
|
con_data = &(chan->data);
|
||||||
|
|
||||||
|
switch (command) {
|
||||||
|
case CON_IOCTRL_ANSI_ON:
|
||||||
|
/* Turn on ANSI interpreting */
|
||||||
|
con_data->control |= CON_CTRL_ANSI;
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case CON_IOCTRL_ANSI_OFF:
|
||||||
|
/* Turn on ANSI interpreting */
|
||||||
|
con_data->control &= ~CON_CTRL_ANSI;
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
646
src/dev/fdc.c
Normal file
646
src/dev/fdc.c
Normal file
|
@ -0,0 +1,646 @@
|
||||||
|
/**
|
||||||
|
* Definitions support low level FDC device driver
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
|
|
||||||
|
#include "log.h"
|
||||||
|
#include "types.h"
|
||||||
|
#include "timers.h"
|
||||||
|
#include "fdc.h"
|
||||||
|
#include "fdc_reg.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Constants
|
||||||
|
*/
|
||||||
|
|
||||||
|
const long fdc_motor_wait = 18; /* The number of jiffies to wait for the motor to spin up: 300ms */
|
||||||
|
const long fdc_motor_timeout = 120; /* The number of jiffies to let the motor spin without activity: 2 seconds */
|
||||||
|
const long fdc_timeout = 10; /* The number of jiffies to allow for basic wait loops */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Types
|
||||||
|
*/
|
||||||
|
|
||||||
|
enum fdc_command {
|
||||||
|
FDC_CMD_READ_TRACK = 2,
|
||||||
|
FDC_CMD_SPECIFY = 3,
|
||||||
|
FDC_CMD_SENSE_DRIVE_STATUS = 4,
|
||||||
|
FDC_CMD_WRITE_DATA = 5,
|
||||||
|
FDC_CMD_READ_DATA = 6,
|
||||||
|
FDC_CMD_RECALIBRATE = 7,
|
||||||
|
FDC_CMD_SENSE_INTERRUPT = 8,
|
||||||
|
FDC_CMD_WRITE_DELETED_DATA = 9,
|
||||||
|
FDC_CMD_READ_ID = 10,
|
||||||
|
FDC_CMD_READ_DELETED_TRACK = 12,
|
||||||
|
FDC_CMD_FORMAT_TRACK = 13,
|
||||||
|
FDC_CMD_DUMPREG = 14,
|
||||||
|
FDC_CMD_SEEK = 15,
|
||||||
|
FDC_CMD_VERSION = 16,
|
||||||
|
FDC_CMD_SCAN_EQUAL = 17,
|
||||||
|
FDC_CMD_CONFIGURE = 19
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Device variables
|
||||||
|
*/
|
||||||
|
|
||||||
|
static unsigned char fdc_stat = 0;
|
||||||
|
static long fdc_motor_off_time = 0; /* The time (in jiffies) when the motor should turn off */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Wait for the FDC to be ready for a transfer from the CPU
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, -1 on timeout
|
||||||
|
*/
|
||||||
|
short fdc_check_rqm() {
|
||||||
|
long target_time = timers_jiffies() + fdc_timeout;
|
||||||
|
unsigned char msr;
|
||||||
|
|
||||||
|
TRACE("fdc_check_rqm");
|
||||||
|
|
||||||
|
do {
|
||||||
|
msr = *FDC_MSR;
|
||||||
|
} while (((msr & FDC_MSR_RQM) == 0) && (target_time > timers_jiffies()));
|
||||||
|
|
||||||
|
if ((msr & FDC_MSR_RQM) == FDC_MSR_RQM) {
|
||||||
|
/* Return success */
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
/* Return that we hit a timeout */
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Wait while drive #0 is busy...
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, -1 on timeout
|
||||||
|
*/
|
||||||
|
short fdc_wait_drv0_busy() {
|
||||||
|
long target_time = timers_jiffies() + fdc_timeout;
|
||||||
|
unsigned char msr;
|
||||||
|
|
||||||
|
TRACE("fdc_wait_drv0_busy");
|
||||||
|
|
||||||
|
do {
|
||||||
|
msr = *FDC_MSR;
|
||||||
|
} while (((msr & FDC_MSR_DRV0BSY) == FDC_MSR_DRV0BSY) && (target_time > timers_jiffies()));
|
||||||
|
|
||||||
|
if ((msr & FDC_MSR_DRV0BSY) == 0) {
|
||||||
|
/* Return success */
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
/* Return that we hit a timeout */
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Wait until the CPU can read data from the FDC
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, -1 on timeout
|
||||||
|
*/
|
||||||
|
short fdc_can_read_data() {
|
||||||
|
long target_time = timers_jiffies() + fdc_timeout;
|
||||||
|
unsigned char msr;
|
||||||
|
|
||||||
|
TRACE("fdc_can_read_data");
|
||||||
|
|
||||||
|
do {
|
||||||
|
msr = *FDC_MSR;
|
||||||
|
} while (((msr & FDC_MSR_DIO) == 0) && (target_time > timers_jiffies()));
|
||||||
|
|
||||||
|
if ((msr & FDC_MSR_DIO) == FDC_MSR_DIO) {
|
||||||
|
/* Return success */
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
/* Return that we hit a timeout */
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Wait until the CPU can write data to the FDC
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, -1 on timeout
|
||||||
|
*/
|
||||||
|
short fdc_wait_can_write() {
|
||||||
|
long target_time = timers_jiffies() + fdc_timeout;
|
||||||
|
unsigned char msr;
|
||||||
|
|
||||||
|
TRACE("fdc_wait_can_write");
|
||||||
|
|
||||||
|
do {
|
||||||
|
msr = *FDC_MSR;
|
||||||
|
} while (((msr & FDC_MSR_DIO) == FDC_MSR_DIO) && (target_time > timers_jiffies()));
|
||||||
|
|
||||||
|
if ((msr & FDC_MSR_DIO) == 0) {
|
||||||
|
/* Return success */
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
/* Return that we hit a timeout */
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Wait while the FDC is busy with a command...
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, -1 on timeout
|
||||||
|
*/
|
||||||
|
short fdc_wait_cmd_busy() {
|
||||||
|
long target_time = timers_jiffies() + fdc_timeout;
|
||||||
|
unsigned char msr;
|
||||||
|
|
||||||
|
TRACE("fdc_wait_cmd_busy");
|
||||||
|
|
||||||
|
do {
|
||||||
|
msr = *FDC_MSR;
|
||||||
|
} while (((msr & FDC_MSR_CMDBSY) == FDC_MSR_CMDBSY) && (target_time > timers_jiffies()));
|
||||||
|
|
||||||
|
if ((msr & FDC_MSR_CMDBSY) == 0) {
|
||||||
|
/* Return success */
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
/* Return that we hit a timeout */
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Wait until the FDC has a byte ready to ready
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, -1 on timeout
|
||||||
|
*/
|
||||||
|
short fdc_can_read() {
|
||||||
|
long target_time = timers_jiffies() + fdc_timeout;
|
||||||
|
unsigned char master_status;
|
||||||
|
|
||||||
|
TRACE("fdc_can_read");
|
||||||
|
|
||||||
|
do {
|
||||||
|
master_status = *FDC_MSR & (FDC_MSR_DIO | FDC_MSR_RQM);
|
||||||
|
} while ((target_time > timers_jiffies()) && (master_status != (FDC_MSR_RQM | FDC_MSR_DIO)));
|
||||||
|
|
||||||
|
if ((master_status & FDC_MSR_DIO) != 0) {
|
||||||
|
/* Return success */
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
/* Return that we hit a timeout */
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Wait until the FDC is clear to receive a byte
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, -1 on timeout
|
||||||
|
*/
|
||||||
|
short fdc_can_write() {
|
||||||
|
long target_time = timers_jiffies() + fdc_timeout;
|
||||||
|
unsigned char master_status;
|
||||||
|
|
||||||
|
TRACE("fdc_can_write");
|
||||||
|
|
||||||
|
do {
|
||||||
|
master_status = *FDC_MSR & (FDC_MSR_DIO | FDC_MSR_RQM);
|
||||||
|
} while ((target_time > timers_jiffies()) && (master_status != FDC_MSR_RQM));
|
||||||
|
|
||||||
|
if ((master_status & FDC_MSR_DIO) == 0) {
|
||||||
|
/* Return success */
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
/* Return that we hit a timeout */
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Spin up the drive's spindle motor
|
||||||
|
*/
|
||||||
|
short fdc_motor_on() {
|
||||||
|
TRACE("fdc_motor_on");
|
||||||
|
|
||||||
|
log_num(LOG_TRACE, "FDC_DOR: ", *FDC_DOR);
|
||||||
|
|
||||||
|
// if ((*FDC_DOR & FDC_DOR_MOT0) != FDC_DOR_MOT0) {
|
||||||
|
// /* Motor is not on... turn it on without DMA or RESET */
|
||||||
|
*FDC_DOR = FDC_DOR_MOT0 | FDC_DOR_NRESET;
|
||||||
|
|
||||||
|
log_num(LOG_TRACE, "FDC_DOR 2: ", *FDC_DOR);
|
||||||
|
|
||||||
|
if (fdc_check_rqm()) {
|
||||||
|
/* Got a timeout after trying to turn on the motor */
|
||||||
|
log(LOG_ERROR, "fdc_motor_on timeout");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Wait a decent time for the motor to spin up */
|
||||||
|
long wait_time = timers_jiffies() + fdc_motor_wait;
|
||||||
|
while (wait_time > timers_jiffies()) ;
|
||||||
|
// }
|
||||||
|
|
||||||
|
/* Set a new target time to shut off the motor */
|
||||||
|
fdc_motor_off_time = timers_jiffies() + fdc_motor_timeout;
|
||||||
|
|
||||||
|
/* Flag that the motor is on */
|
||||||
|
fdc_stat |= FDC_STAT_MOTOR_ON;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Spin down the drive's spindle motor
|
||||||
|
*/
|
||||||
|
void fdc_motor_off() {
|
||||||
|
TRACE("fdc_motor_off");
|
||||||
|
|
||||||
|
if ((*FDC_DOR & FDC_DOR_MOT0) == FDC_DOR_MOT0) {
|
||||||
|
/* Motor is not on... turn it on without DMA or RESET */
|
||||||
|
*FDC_DOR = FDC_DOR_NRESET;
|
||||||
|
|
||||||
|
if (fdc_check_rqm()) {
|
||||||
|
/* Got a timeout after trying to turn on the motor */
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Flag that the motor is off */
|
||||||
|
fdc_stat &= ~FDC_STAT_MOTOR_ON;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Issue the SENSE INTERRUPT command
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* st0 = pointer to the ST0 location
|
||||||
|
* pcn = pointer to the Present Cylinder Number location
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, -1 on timeout
|
||||||
|
*/
|
||||||
|
short fdc_sense_interrupt_status(unsigned char *st0, unsigned char *pcn) {
|
||||||
|
TRACE("fdc_sense_interrupt_status");
|
||||||
|
|
||||||
|
/* Set up "return" values to something neutral */
|
||||||
|
*st0 = 0;
|
||||||
|
*pcn = 0xff;
|
||||||
|
|
||||||
|
if (fdc_wait_cmd_busy() < 0) {
|
||||||
|
/* Timed out waiting for the FDC to be free */
|
||||||
|
log(LOG_ERROR, "fdc_wait_cmd_busy: timeout");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fdc_check_rqm() < 0) {
|
||||||
|
/* Timed out waiting for permission to write a command byte */
|
||||||
|
log(LOG_ERROR, "fdc_check_rqm 1: timeout");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Send command */
|
||||||
|
*FDC_DATA = FDC_CMD_SENSE_INTERRUPT;
|
||||||
|
|
||||||
|
if (fdc_can_read_data() < 0) {
|
||||||
|
/* Timed out waiting to receive data */
|
||||||
|
log(LOG_ERROR, "fdc_can_read_data: timeout");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Read the status byte */
|
||||||
|
*st0 = *FDC_DATA;
|
||||||
|
|
||||||
|
if (fdc_check_rqm() < 0) {
|
||||||
|
/* Timed out waiting for permission to transfer another byte */
|
||||||
|
log(LOG_ERROR, "fdc_check_rqm 2: timeout");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Read the present cylinder number */
|
||||||
|
*pcn = *FDC_DATA;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Issue the SPECIFY command
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, -1 on timeout
|
||||||
|
*/
|
||||||
|
short fdc_specify() {
|
||||||
|
TRACE("fdc_specify");
|
||||||
|
|
||||||
|
if (fdc_wait_cmd_busy() < 0) {
|
||||||
|
/* Timed out waiting for the FDC to be free */
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fdc_check_rqm() < 0) {
|
||||||
|
/* Timed out waiting for permission to write a command byte */
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Send command */
|
||||||
|
*FDC_DATA = FDC_CMD_SPECIFY;
|
||||||
|
|
||||||
|
if (fdc_check_rqm() < 0) {
|
||||||
|
/* Timed out waiting for permission to transfer another byte */
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Send the seek rate time and head load times */
|
||||||
|
*FDC_DATA = 0xCF;
|
||||||
|
|
||||||
|
if (fdc_can_write() < 0) {
|
||||||
|
/* Timed out waiting for permission to transfer another byte */
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set head unload time to maximum, and no DMA */
|
||||||
|
*FDC_DATA = 0x01;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Issue the CONFIGURE command
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, -1 on timeout
|
||||||
|
*/
|
||||||
|
short fdc_configure() {
|
||||||
|
TRACE("fdc_configure");
|
||||||
|
|
||||||
|
if (fdc_wait_cmd_busy() < 0) {
|
||||||
|
/* Timed out waiting for the FDC to be free */
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fdc_check_rqm() < 0) {
|
||||||
|
/* Timed out waiting for permission to write a command byte */
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Send command */
|
||||||
|
*FDC_DATA = FDC_CMD_CONFIGURE;
|
||||||
|
|
||||||
|
if (fdc_check_rqm() < 0) {
|
||||||
|
/* Timed out waiting for permission to transfer another byte */
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Send a padding byte of 0 */
|
||||||
|
*FDC_DATA = 0x00;
|
||||||
|
|
||||||
|
if (fdc_check_rqm() < 0) {
|
||||||
|
/* Timed out waiting for permission to transfer another byte */
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Implied seek, enable FIFO, enable POLL, FIFO threshold = 4 bytes */
|
||||||
|
*FDC_DATA = 0x44;
|
||||||
|
|
||||||
|
if (fdc_check_rqm() < 0) {
|
||||||
|
/* Timed out waiting for permission to transfer another byte */
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Send track precompensation = 0 */
|
||||||
|
*FDC_DATA = 0x00;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Issue the VERSION command
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* version = pointer to the byte to hold the version
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, -1 on timeout
|
||||||
|
*/
|
||||||
|
short fdc_version(unsigned char *version) {
|
||||||
|
TRACE("fdc_version");
|
||||||
|
|
||||||
|
if (fdc_wait_cmd_busy() < 0) {
|
||||||
|
/* Timed out waiting for the FDC to be free */
|
||||||
|
log(LOG_ERROR, "fdc_version fdc_wait_cmd_busy timed out");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fdc_check_rqm() < 0) {
|
||||||
|
/* Timed out waiting for permission to write a command byte */
|
||||||
|
log(LOG_ERROR, "fdc_version fdc_check_rqm 1 timed out");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Send command */
|
||||||
|
*FDC_DATA = FDC_CMD_VERSION;
|
||||||
|
|
||||||
|
if (fdc_check_rqm() < 0) {
|
||||||
|
/* Timed out waiting for permission to transfer another byte */
|
||||||
|
log(LOG_ERROR, "fdc_version fdc_check_rqm 2 timed out");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Get the version */
|
||||||
|
*version = *FDC_DATA;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Reset the FDC
|
||||||
|
*/
|
||||||
|
short fdc_reset() {
|
||||||
|
unsigned char st0;
|
||||||
|
unsigned char pcn;
|
||||||
|
short i;
|
||||||
|
long target_time;
|
||||||
|
|
||||||
|
TRACE("fdc_reset");
|
||||||
|
|
||||||
|
/* Reset the controller */
|
||||||
|
target_time = timers_jiffies() + fdc_timeout;
|
||||||
|
*FDC_DOR = 0;
|
||||||
|
while (target_time > timers_jiffies()) ;
|
||||||
|
*FDC_DOR = FDC_DOR_NRESET;
|
||||||
|
|
||||||
|
/* Default precompensation, data rate for 1.44MB */
|
||||||
|
*FDC_DSR = 0;
|
||||||
|
|
||||||
|
/* Set data rate for 1.44 MB */
|
||||||
|
*FDC_CCR = 0;
|
||||||
|
|
||||||
|
/* Issue the sense interrupt command 4 times. */
|
||||||
|
for (i = 0; i < 4; i++) {
|
||||||
|
st0 = 0;
|
||||||
|
pcn = 0;
|
||||||
|
if (fdc_sense_interrupt_status(&st0, &pcn) < 0) {
|
||||||
|
/* Timeout on sense interrupt */
|
||||||
|
log(LOG_ERROR, "fdc_sense_interrupt_status timeout");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
log_num(LOG_INFO, "ST0: ", st0);
|
||||||
|
log_num(LOG_INFO, "PCN: ", pcn);
|
||||||
|
|
||||||
|
if (st0 = 0xC0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Configure the FDC */
|
||||||
|
if (fdc_configure() < 0) {
|
||||||
|
/* Timeout on sense interrupt */
|
||||||
|
log(LOG_ERROR, "fdc_configure timeout");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Specify seek and head times, and turn off DMA */
|
||||||
|
if (fdc_specify() < 0) {
|
||||||
|
/* Timeout on sense interrupt */
|
||||||
|
log(LOG_ERROR, "fdc_specify timeout");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
fdc_motor_on();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Install the FDC driver
|
||||||
|
*/
|
||||||
|
short fdc_install() {
|
||||||
|
fdc_stat = FDC_STAT_NOINIT;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initialize the FDC
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, any negative number is an error code
|
||||||
|
*/
|
||||||
|
short fdc_init() {
|
||||||
|
unsigned char version;
|
||||||
|
|
||||||
|
if (fdc_version(&version) < 0) {
|
||||||
|
log(LOG_ERROR, "Unable to get FDC version");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
log_num(LOG_INFO, "FDC version: ", version);
|
||||||
|
|
||||||
|
if (fdc_reset() < 0) {
|
||||||
|
log(LOG_ERROR, "Unable to reset the FDC");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
fdc_stat &= ~FDC_STAT_NOINIT;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Read a block from the FDC
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* lba = the logical block address of the block to read
|
||||||
|
* buffer = the buffer into which to copy the block data
|
||||||
|
* size = the size of the buffer.
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* number of bytes read, any negative number is an error code
|
||||||
|
*/
|
||||||
|
short fdc_read(long lba, unsigned char * buffer, short size) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Write a block to the FDC
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* lba = the logical block address of the block to write
|
||||||
|
* buffer = the buffer containing the data to write
|
||||||
|
* size = the size of the buffer.
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* number of bytes written, any negative number is an error code
|
||||||
|
*/
|
||||||
|
short fdc_write(long lba, const unsigned char * buffer, short size) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return the status of the FDC
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* the status of the device
|
||||||
|
*/
|
||||||
|
short fdc_status() {
|
||||||
|
return fdc_stat;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return any error code of the FDC
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* the error code of the device
|
||||||
|
*/
|
||||||
|
short fdc_error() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Ensure that any pending writes to teh device have been completed
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, any negative number is an error code
|
||||||
|
*/
|
||||||
|
short fdc_flush() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Issue a control command to the device
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* command = the number of the command to send
|
||||||
|
* buffer = pointer to bytes of additional data for the command
|
||||||
|
* size = the size of the buffer
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, any negative number is an error code
|
||||||
|
*/
|
||||||
|
short fdc_ioctrl(short command, unsigned char * buffer, short size) {
|
||||||
|
switch (command) {
|
||||||
|
case FDC_CTRL_MOTOR_ON:
|
||||||
|
return fdc_motor_on();
|
||||||
|
|
||||||
|
case FDC_CTRL_MOTOR_OFF:
|
||||||
|
fdc_motor_off();
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
104
src/dev/fdc.h
Normal file
104
src/dev/fdc.h
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
/**
|
||||||
|
* Definitions support low level FDC device driver
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __FDC_H
|
||||||
|
#define __FDC_H
|
||||||
|
|
||||||
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
|
|
||||||
|
#include "types.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Definitions for the FDC controller
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define FDC_SECTOR_SIZE 512 /* Size of a block on the FDC */
|
||||||
|
|
||||||
|
#define FDC_STAT_NOINIT 0x01 /* FDC has not been initialized */
|
||||||
|
#define FDC_STAT_PRESENT 0x02 /* FD is present */
|
||||||
|
#define FDC_STAT_PROTECTED 0x04 /* FD is write-protected */
|
||||||
|
#define FDC_STAT_MOTOR_ON 0x08 /* FDC spindle motor is on */
|
||||||
|
|
||||||
|
#define FDC_CTRL_MOTOR_ON 0x0100 /* IOCTRL command to start spinning the motor */
|
||||||
|
#define FDC_CTRL_MOTOR_OFF 0x0200 /* IOCTRL command to start spinning the motor */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Install the FDC driver
|
||||||
|
*/
|
||||||
|
extern short fdc_install();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initialize the FDC
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, any negative number is an error code
|
||||||
|
*/
|
||||||
|
extern short fdc_init();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Read a block from the FDC
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* lba = the logical block address of the block to read
|
||||||
|
* buffer = the buffer into which to copy the block data
|
||||||
|
* size = the size of the buffer.
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* number of bytes read, any negative number is an error code
|
||||||
|
*/
|
||||||
|
extern short fdc_read(long lba, unsigned char * buffer, short size);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Write a block to the FDC
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* lba = the logical block address of the block to write
|
||||||
|
* buffer = the buffer containing the data to write
|
||||||
|
* size = the size of the buffer.
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* number of bytes written, any negative number is an error code
|
||||||
|
*/
|
||||||
|
extern short fdc_write(long lba, const unsigned char * buffer, short size);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return the status of the FDC
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* the status of the device
|
||||||
|
*/
|
||||||
|
extern short fdc_status();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return any error code of the FDC
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* the error code of the device
|
||||||
|
*/
|
||||||
|
extern short fdc_error();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Ensure that any pending writes to teh device have been completed
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, any negative number is an error code
|
||||||
|
*/
|
||||||
|
extern short fdc_flush();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Issue a control command to the device
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* command = the number of the command to send
|
||||||
|
* buffer = pointer to bytes of additional data for the command
|
||||||
|
* size = the size of the buffer
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, any negative number is an error code
|
||||||
|
*/
|
||||||
|
extern short fdc_ioctrl(short command, unsigned char * buffer, short size);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
113
src/dev/fsys.c
113
src/dev/fsys.c
|
@ -58,9 +58,8 @@ short fatfs_to_foenix(FRESULT r) {
|
||||||
if (r == 0) {
|
if (r == 0) {
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
/* TODO: flesh this out */
|
/* Convert FatFS error numbers to Foenix error numbers */
|
||||||
log_num(LOG_DEBUG, "FATFS: ", r);
|
return (FSYS_ERR_DISK_ERR - (short)r + 1);
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -178,7 +177,7 @@ short fsys_opendir(const char * path) {
|
||||||
/* Try to open the directory */
|
/* Try to open the directory */
|
||||||
if (path[0] == 0) {
|
if (path[0] == 0) {
|
||||||
char cwd[128];
|
char cwd[128];
|
||||||
fsys_getcwd(cwd, 128);
|
fsys_get_cwd(cwd, 128);
|
||||||
fres = f_opendir(&g_directory[dir], cwd);
|
fres = f_opendir(&g_directory[dir], cwd);
|
||||||
} else {
|
} else {
|
||||||
fres = f_opendir(&g_directory[dir], path);
|
fres = f_opendir(&g_directory[dir], path);
|
||||||
|
@ -265,7 +264,45 @@ short fsys_readdir(short dir, p_file_info file) {
|
||||||
* the directory handle to use for subsequent calls if >= 0, error if negative
|
* the directory handle to use for subsequent calls if >= 0, error if negative
|
||||||
*/
|
*/
|
||||||
short fsys_findfirst(const char * path, const char * pattern, p_file_info file) {
|
short fsys_findfirst(const char * path, const char * pattern, p_file_info file) {
|
||||||
return -1;
|
FILINFO finfo;
|
||||||
|
FRESULT fres;
|
||||||
|
short dir;
|
||||||
|
short i;
|
||||||
|
|
||||||
|
/* Allocate a directory handle */
|
||||||
|
for (i = 0; i < MAX_DIRECTORIES; i++) {
|
||||||
|
if (g_dir_state[i] == 0) {
|
||||||
|
dir = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dir < 0) {
|
||||||
|
return ERR_OUT_OF_HANDLES;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
if (fres != FR_OK) {
|
||||||
|
return fatfs_to_foenix(fres);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
int i;
|
||||||
|
|
||||||
|
/* Copy file information into the kernel table */
|
||||||
|
file->size = finfo.fsize;
|
||||||
|
file->date = finfo.fdate;
|
||||||
|
file->time = finfo.ftime;
|
||||||
|
file->attributes = finfo.fattrib;
|
||||||
|
|
||||||
|
for (i = 0; i < MAX_PATH_LEN; i++) {
|
||||||
|
file->name[i] = finfo.fname[i];
|
||||||
|
if (file->name[i] == 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return dir;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -279,7 +316,35 @@ short fsys_findfirst(const char * path, const char * pattern, p_file_info file)
|
||||||
* 0 on success, error if negative
|
* 0 on success, error if negative
|
||||||
*/
|
*/
|
||||||
short fsys_findnext(short dir, p_file_info file) {
|
short fsys_findnext(short dir, p_file_info file) {
|
||||||
return -1;
|
FILINFO finfo;
|
||||||
|
FRESULT fres;
|
||||||
|
|
||||||
|
if (g_dir_state[dir]) {
|
||||||
|
fres = f_findnext(&g_dir_state[dir], &finfo);
|
||||||
|
if (fres != FR_OK) {
|
||||||
|
return fatfs_to_foenix(fres);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
int i;
|
||||||
|
|
||||||
|
/* Copy file information into the kernel table */
|
||||||
|
file->size = finfo.fsize;
|
||||||
|
file->date = finfo.fdate;
|
||||||
|
file->time = finfo.ftime;
|
||||||
|
file->attributes = finfo.fattrib;
|
||||||
|
|
||||||
|
for (i = 0; i < MAX_PATH_LEN; i++) {
|
||||||
|
file->name[i] = finfo.fname[i];
|
||||||
|
if (file->name[i] == 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return ERR_BAD_HANDLE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -338,7 +403,14 @@ short fsys_delete(const char * path) {
|
||||||
* 0 on success, negative number on failure.
|
* 0 on success, negative number on failure.
|
||||||
*/
|
*/
|
||||||
short fsys_rename(const char * old_path, const char * new_path) {
|
short fsys_rename(const char * old_path, const char * new_path) {
|
||||||
return -1;
|
FRESULT fres;
|
||||||
|
|
||||||
|
fres = f_rename(old_path, new_path);
|
||||||
|
if (fres != 0) {
|
||||||
|
return fatfs_to_foenix(fres);
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -350,14 +422,14 @@ short fsys_rename(const char * old_path, const char * new_path) {
|
||||||
* Returns:
|
* Returns:
|
||||||
* 0 on success, negative number on failure.
|
* 0 on success, negative number on failure.
|
||||||
*/
|
*/
|
||||||
short fsys_setcwd(const char * path) {
|
short fsys_set_cwd(const char * path) {
|
||||||
FRESULT result;
|
FRESULT result;
|
||||||
|
|
||||||
result = f_chdir(path);
|
result = f_chdir(path);
|
||||||
if (result == FR_OK) {
|
if (result == FR_OK) {
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
log_num(LOG_ERROR, "fsys_setcwd error: ", result);
|
log_num(LOG_ERROR, "fsys_set_cwd error: ", result);
|
||||||
return fatfs_to_foenix(result);
|
return fatfs_to_foenix(result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -372,7 +444,7 @@ short fsys_setcwd(const char * path) {
|
||||||
* Returns:
|
* Returns:
|
||||||
* 0 on success, negative number on failure.
|
* 0 on success, negative number on failure.
|
||||||
*/
|
*/
|
||||||
short fsys_getcwd(char * path, short size) {
|
short fsys_get_cwd(char * path, short size) {
|
||||||
FRESULT result;
|
FRESULT result;
|
||||||
|
|
||||||
f_chdrive("");
|
f_chdrive("");
|
||||||
|
@ -380,7 +452,7 @@ short fsys_getcwd(char * path, short size) {
|
||||||
if (result == FR_OK) {
|
if (result == FR_OK) {
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
log_num(LOG_ERROR, "fsys_getcwd error: ", result);
|
log_num(LOG_ERROR, "fsys_get_cwd error: ", result);
|
||||||
return fatfs_to_foenix(result);
|
return fatfs_to_foenix(result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -452,6 +524,25 @@ short fchan_readline(t_channel * chan, unsigned char * buffer, short size) {
|
||||||
* read a single byte from the device
|
* read a single byte from the device
|
||||||
*/
|
*/
|
||||||
short fchan_read_b(t_channel * chan) {
|
short fchan_read_b(t_channel * chan) {
|
||||||
|
FRESULT result;
|
||||||
|
FIL * file;
|
||||||
|
short total_read;
|
||||||
|
char buffer[2];
|
||||||
|
|
||||||
|
log(LOG_TRACE, "fchan_read");
|
||||||
|
|
||||||
|
file = fchan_to_file(chan);
|
||||||
|
if (file) {
|
||||||
|
result = f_read(file, buffer, 1, &total_read);
|
||||||
|
if (result == FR_OK) {
|
||||||
|
return (short)(buffer[0] & 0x00ff);
|
||||||
|
} else {
|
||||||
|
return fatfs_to_foenix(result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ERR_BADCHANNEL;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -195,7 +195,7 @@ extern short fsys_rename(const char * old_path, const char * new_path);
|
||||||
* Returns:
|
* Returns:
|
||||||
* 0 on success, negative number on failure.
|
* 0 on success, negative number on failure.
|
||||||
*/
|
*/
|
||||||
extern short fsys_setcwd(const char * path);
|
extern short fsys_set_cwd(const char * path);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the current working drive and directory
|
* Get the current working drive and directory
|
||||||
|
@ -207,7 +207,7 @@ extern short fsys_setcwd(const char * path);
|
||||||
* Returns:
|
* Returns:
|
||||||
* 0 on success, negative number on failure.
|
* 0 on success, negative number on failure.
|
||||||
*/
|
*/
|
||||||
extern short fsys_getcwd(char * path, short size);
|
extern short fsys_get_cwd(char * path, short size);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Load a file into memory at the designated destination address.
|
* Load a file into memory at the designated destination address.
|
||||||
|
|
|
@ -2,10 +2,15 @@
|
||||||
* Declarations for Mo, the built-in keyboard of the A2560K
|
* Declarations for Mo, the built-in keyboard of the A2560K
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "sys_general.h"
|
||||||
|
|
||||||
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
|
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "interrupt.h"
|
#include "interrupt.h"
|
||||||
#include "kbd_mo.h"
|
#include "kbd_mo.h"
|
||||||
#include "ring_buffer.h"
|
#include "ring_buffer.h"
|
||||||
|
#include "gabe_reg.h"
|
||||||
|
|
||||||
#define KBD_MO_DATA ((volatile unsigned short *)0x00C00040) /* Data register for the keyboard (scan codes will be here) */
|
#define KBD_MO_DATA ((volatile unsigned short *)0x00C00040) /* Data register for the keyboard (scan codes will be here) */
|
||||||
#define KBD_MO_STAT ((volatile unsigned short *)0x00C00042) /* Status register for the keyboard */
|
#define KBD_MO_STAT ((volatile unsigned short *)0x00C00042) /* Status register for the keyboard */
|
||||||
|
@ -50,6 +55,7 @@ struct s_kdbmo_kbd {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
struct s_kdbmo_kbd g_kbdmo_control;
|
struct s_kdbmo_kbd g_kbdmo_control;
|
||||||
|
static short kbdmo_leds = 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* US keyboard layout scancode translation tables
|
* US keyboard layout scancode translation tables
|
||||||
|
@ -214,6 +220,10 @@ short kbdmo_init() {
|
||||||
/* Make sure everything is read */
|
/* Make sure everything is read */
|
||||||
kbdmo_flush_out();
|
kbdmo_flush_out();
|
||||||
|
|
||||||
|
/* Turn off the LEDs */
|
||||||
|
kbdmo_leds = 0;
|
||||||
|
*GABE_MO_LEDS = kbdmo_leds;
|
||||||
|
|
||||||
/* Clear out any pending interrupt */
|
/* Clear out any pending interrupt */
|
||||||
int_clear(INT_KBD_A2560K);
|
int_clear(INT_KBD_A2560K);
|
||||||
|
|
||||||
|
@ -233,6 +243,17 @@ short kbdmo_init() {
|
||||||
*/
|
*/
|
||||||
void kbdmo_toggle_modifier(short flag) {
|
void kbdmo_toggle_modifier(short flag) {
|
||||||
g_kbdmo_control.modifiers ^= flag;
|
g_kbdmo_control.modifiers ^= flag;
|
||||||
|
|
||||||
|
if (flag == KBD_LOCK_CAPS) {
|
||||||
|
if (g_kbdmo_control.modifiers & flag) {
|
||||||
|
/* CAPS is on... set it to purple */
|
||||||
|
kbdmo_set_caps_led(5);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
/* CAPS is off... turn off the LED */
|
||||||
|
kbdmo_set_caps_led(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -428,3 +449,49 @@ unsigned short kbdmo_get_scancode_poll() {
|
||||||
kbdmo_handle_irq();
|
kbdmo_handle_irq();
|
||||||
return kbdmo_get_scancode();
|
return kbdmo_get_scancode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set the color of the LED for the capslock
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* colors = color specification, three bits: 0x_____RGB
|
||||||
|
*/
|
||||||
|
void kbdmo_set_caps_led(short colors) {
|
||||||
|
kbdmo_leds = (kbdmo_leds & 0xF1FF) | ((colors & 0x07) << 9);
|
||||||
|
*GABE_MO_LEDS = kbdmo_leds;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set the color of the LED for the floppy drive
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* colors = color specification, three bits: 0x_____RGB
|
||||||
|
*/
|
||||||
|
void kbdmo_set_fdc_led(short colors) {
|
||||||
|
kbdmo_leds = (kbdmo_leds & 0xFFF8) | (colors & 0x07);
|
||||||
|
*GABE_MO_LEDS = kbdmo_leds;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set the color of the LED for the SD card slot
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* colors = color specification, three bits: 0x_____RGB
|
||||||
|
*/
|
||||||
|
void kbdmo_set_sdc_led(short colors) {
|
||||||
|
kbdmo_leds = (kbdmo_leds & 0xFFC7) | ((colors & 0x07) << 3);
|
||||||
|
*GABE_MO_LEDS = kbdmo_leds;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set the color of the LED for the IDE hard drive
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* colors = color specification, three bits: 0x_____RGB
|
||||||
|
*/
|
||||||
|
void kbdmo_set_hdc_led(short colors) {
|
||||||
|
kbdmo_leds = (kbdmo_leds & 0xFE3F) | ((colors & 0x07) << 6);
|
||||||
|
*GABE_MO_LEDS = kbdmo_leds;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -5,6 +5,10 @@
|
||||||
#ifndef __KBD_MO_H
|
#ifndef __KBD_MO_H
|
||||||
#define __KBD_MO_H
|
#define __KBD_MO_H
|
||||||
|
|
||||||
|
#include "sys_general.h"
|
||||||
|
|
||||||
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialize the PS2 controller and any attached devices
|
* Initialize the PS2 controller and any attached devices
|
||||||
* Enable keyboard and mouse interrupts as appropriate.
|
* Enable keyboard and mouse interrupts as appropriate.
|
||||||
|
@ -42,4 +46,38 @@ extern unsigned short kbdmo_get_scancode_poll();
|
||||||
|
|
||||||
extern void kbdmo_handle_irq();
|
extern void kbdmo_handle_irq();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set the color of the LED for the capslock
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* colors = color specification, three bits: 0x_____RGB
|
||||||
|
*/
|
||||||
|
extern void kbdmo_set_caps_led(short colors);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set the color of the LED for the floppy drive
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* colors = color specification, three bits: 0x_____RGB
|
||||||
|
*/
|
||||||
|
extern void kbdmo_set_fdc_led(short colors);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set the color of the LED for the SD card slot
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* colors = color specification, three bits: 0x_____RGB
|
||||||
|
*/
|
||||||
|
extern void kbdmo_set_sdc_led(short colors);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set the color of the LED for the IDE hard drive
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* colors = color specification, three bits: 0x_____RGB
|
||||||
|
*/
|
||||||
|
extern void kbdmo_set_hdc_led(short colors);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -5,6 +5,9 @@
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "dev/lpt.h"
|
#include "dev/lpt.h"
|
||||||
#include "dev/text_screen_iii.h"
|
#include "dev/text_screen_iii.h"
|
||||||
|
#include "sys_general.h"
|
||||||
|
|
||||||
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
|
|
||||||
#define LPT_DATA_PORT ((volatile unsigned char *)0x00C02378)
|
#define LPT_DATA_PORT ((volatile unsigned char *)0x00C02378)
|
||||||
|
|
||||||
|
@ -32,11 +35,9 @@
|
||||||
short lpt_delay() {
|
short lpt_delay() {
|
||||||
int i;
|
int i;
|
||||||
short x;
|
short x;
|
||||||
for (i = 0, x = 0; i < 65535; i++) {
|
for (i = 0, x = 0; i < 10; i++) {
|
||||||
x++;
|
x++;
|
||||||
}
|
}
|
||||||
|
|
||||||
DEBUG(".");
|
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -138,3 +139,5 @@ short lpt_write(p_channel chan, unsigned char * buffer, short size) {
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
82
src/dev/midi.c
Normal file
82
src/dev/midi.c
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
/*
|
||||||
|
* Definitions for the MIDI ports
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "midi_reg.h"
|
||||||
|
#include "dev/midi.h"
|
||||||
|
#include "simpleio.h"
|
||||||
|
#include "sys_general.h"
|
||||||
|
|
||||||
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return true if there is data waiting to be read
|
||||||
|
*/
|
||||||
|
short midi_input_not_ready() {
|
||||||
|
return (*MIDI_STAT & MIDI_STAT_RX_EMPTY);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return true if there is data waiting to be read
|
||||||
|
*/
|
||||||
|
short midi_output_busy() {
|
||||||
|
return (*MIDI_STAT & MIDI_STAT_RX_EMPTY);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initilialize the MIDI port
|
||||||
|
*/
|
||||||
|
short midi_init() {
|
||||||
|
unsigned char dummy;
|
||||||
|
|
||||||
|
while (midi_output_busy()) ;
|
||||||
|
|
||||||
|
*MIDI_CMD = 0xFF; /* Reset the MIDI port */
|
||||||
|
|
||||||
|
/* Wait for the ACK */
|
||||||
|
for (dummy = 0; dummy != 0xFE; ) {
|
||||||
|
while (midi_input_not_ready()) ;
|
||||||
|
dummy = *MIDI_DATA;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (midi_output_busy()) ;
|
||||||
|
|
||||||
|
*MIDI_CMD = 0x3F; /* Switch the MIDI port into UART mode */
|
||||||
|
|
||||||
|
/* Wait for the ACK */
|
||||||
|
for (dummy = 0; dummy != 0xFE; ) {
|
||||||
|
while (midi_input_not_ready()) ;
|
||||||
|
dummy = *MIDI_DATA;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Send a byte to the MIDI port
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* b = the byte to send
|
||||||
|
*/
|
||||||
|
short midi_put(unsigned char b) {
|
||||||
|
while (midi_output_busy()) ;
|
||||||
|
|
||||||
|
/* Send the byte */
|
||||||
|
*MIDI_DATA = b;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get a byte from the MIDI port
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* b = the byte to send
|
||||||
|
*/
|
||||||
|
unsigned char midi_get_poll() {
|
||||||
|
while (midi_input_not_ready()) ;
|
||||||
|
return *MIDI_DATA;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -24,6 +24,6 @@ extern short midi_put(unsigned char b);
|
||||||
* Returns:
|
* Returns:
|
||||||
* b = the byte to send
|
* b = the byte to send
|
||||||
*/
|
*/
|
||||||
extern short midi_get_poll();
|
extern unsigned char midi_get_poll();
|
||||||
|
|
||||||
#endif
|
#endif
|
113
src/dev/pata.c
113
src/dev/pata.c
|
@ -6,12 +6,20 @@
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "errors.h"
|
#include "errors.h"
|
||||||
#include "constants.h"
|
#include "constants.h"
|
||||||
// #include "fatfs/ff.h"
|
#include "indicators.h"
|
||||||
#include "dev/block.h"
|
#include "dev/block.h"
|
||||||
#include "dev/pata.h"
|
#include "dev/pata.h"
|
||||||
#include "dev/text_screen_iii.h"
|
#include "dev/text_screen_iii.h"
|
||||||
|
#include "dev/rtc.h"
|
||||||
#include "pata_reg.h"
|
#include "pata_reg.h"
|
||||||
|
|
||||||
|
//
|
||||||
|
// Constants
|
||||||
|
//
|
||||||
|
|
||||||
|
#define PATA_TIMEOUT_JF 20 /* Timeout in jiffies: 1/60th second */
|
||||||
|
#define PATA_WAIT_JF 10 /* Delay in jiffies: 1/60th second */
|
||||||
|
|
||||||
//
|
//
|
||||||
// Variables
|
// Variables
|
||||||
//
|
//
|
||||||
|
@ -30,16 +38,22 @@ short g_pata_status = PATA_STAT_NOINIT; // Status of the PATA interface
|
||||||
// 0 on success (PATA drive is no longer busy), DEV_TIMEOUT on timeout
|
// 0 on success (PATA drive is no longer busy), DEV_TIMEOUT on timeout
|
||||||
//
|
//
|
||||||
short pata_wait_not_busy() {
|
short pata_wait_not_busy() {
|
||||||
short count = MAX_TRIES_BUSY;
|
long target_ticks;
|
||||||
|
long ticks;
|
||||||
char status;
|
char status;
|
||||||
|
|
||||||
TRACE("pata_wait_not_busy");
|
TRACE("pata_wait_not_busy");
|
||||||
|
|
||||||
|
target_ticks = rtc_get_jiffies() + PATA_TIMEOUT_JF;
|
||||||
do {
|
do {
|
||||||
status = *PATA_CMD_STAT;
|
status = *PATA_CMD_STAT;
|
||||||
} while ((status & PATA_STAT_BSY) && (count-- > 0));
|
ticks = rtc_get_jiffies();
|
||||||
|
} while ((status & PATA_STAT_BSY) && (target_ticks > ticks));
|
||||||
|
|
||||||
if (count == 0) {
|
if (target_ticks <= ticks) {
|
||||||
|
log(LOG_ERROR, "pata_wait_not_busy: timeout");
|
||||||
|
log_num(LOG_ERROR, "target_ticks: ", (int)target_ticks);
|
||||||
|
log_num(LOG_ERROR, "ticks: ", (int)ticks);
|
||||||
return DEV_TIMEOUT;
|
return DEV_TIMEOUT;
|
||||||
} else {
|
} else {
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -53,16 +67,20 @@ short pata_wait_not_busy() {
|
||||||
// 0 on success (PATA drive is ready), DEV_TIMEOUT on timeout
|
// 0 on success (PATA drive is ready), DEV_TIMEOUT on timeout
|
||||||
//
|
//
|
||||||
short pata_wait_ready() {
|
short pata_wait_ready() {
|
||||||
short count = MAX_TRIES_BUSY;
|
long target_ticks;
|
||||||
|
long ticks;
|
||||||
char status;
|
char status;
|
||||||
|
|
||||||
TRACE("pata_wait_ready");
|
TRACE("pata_wait_ready");
|
||||||
|
|
||||||
|
target_ticks = rtc_get_jiffies() + PATA_TIMEOUT_JF;
|
||||||
do {
|
do {
|
||||||
status = *PATA_CMD_STAT;
|
status = *PATA_CMD_STAT;
|
||||||
} while (((status & PATA_STAT_DRDY) == 0) && (count-- > 0));
|
ticks = rtc_get_jiffies();
|
||||||
|
} while (((status & PATA_STAT_DRDY) == 0) && (target_ticks > ticks));
|
||||||
|
|
||||||
if (count == 0) {
|
if (target_ticks <= ticks) {
|
||||||
|
log(LOG_ERROR, "pata_wait_ready: timeout");
|
||||||
return DEV_TIMEOUT;
|
return DEV_TIMEOUT;
|
||||||
} else {
|
} else {
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -76,7 +94,8 @@ short pata_wait_ready() {
|
||||||
// 0 on success (PATA drive is ready and not busy), DEV_TIMEOUT on timeout
|
// 0 on success (PATA drive is ready and not busy), DEV_TIMEOUT on timeout
|
||||||
//
|
//
|
||||||
short pata_wait_ready_not_busy() {
|
short pata_wait_ready_not_busy() {
|
||||||
short count = MAX_TRIES_BUSY;
|
long target_ticks;
|
||||||
|
long ticks;
|
||||||
char status;
|
char status;
|
||||||
|
|
||||||
TRACE("pata_wait_ready_not_busy");
|
TRACE("pata_wait_ready_not_busy");
|
||||||
|
@ -85,11 +104,17 @@ short pata_wait_ready_not_busy() {
|
||||||
// status = *PATA_CMD_STAT;
|
// status = *PATA_CMD_STAT;
|
||||||
// } while (((status & (PATA_STAT_DRDY | PATA_STAT_BSY)) != PATA_STAT_DRDY) && (count-- > 0));
|
// } while (((status & (PATA_STAT_DRDY | PATA_STAT_BSY)) != PATA_STAT_DRDY) && (count-- > 0));
|
||||||
|
|
||||||
|
target_ticks = rtc_get_jiffies() + PATA_TIMEOUT_JF;
|
||||||
do {
|
do {
|
||||||
while ((*PATA_CMD_STAT & PATA_STAT_DRDY) != PATA_STAT_DRDY);
|
while (((*PATA_CMD_STAT & PATA_STAT_DRDY) != PATA_STAT_DRDY) && (target_ticks > ticks)) {
|
||||||
} while ((*PATA_CMD_STAT & PATA_STAT_BSY) == PATA_STAT_BSY);
|
ticks = rtc_get_jiffies();
|
||||||
|
}
|
||||||
|
} while (((*PATA_CMD_STAT & PATA_STAT_BSY) == PATA_STAT_BSY) && (target_ticks > ticks));
|
||||||
|
|
||||||
if (count == 0) {
|
if (target_ticks <= ticks) {
|
||||||
|
log(LOG_ERROR, "pata_wait_ready_not_busy: timeout");
|
||||||
|
log_num(LOG_ERROR, "target_ticks: ", (int)target_ticks);
|
||||||
|
log_num(LOG_ERROR, "ticks: ", (int)ticks);
|
||||||
return DEV_TIMEOUT;
|
return DEV_TIMEOUT;
|
||||||
} else {
|
} else {
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -103,16 +128,20 @@ short pata_wait_ready_not_busy() {
|
||||||
// 0 on success (PATA drive is ready to transfer data), DEV_TIMEOUT on timeout
|
// 0 on success (PATA drive is ready to transfer data), DEV_TIMEOUT on timeout
|
||||||
//
|
//
|
||||||
short pata_wait_data_request() {
|
short pata_wait_data_request() {
|
||||||
short count = MAX_TRIES_BUSY;
|
long target_ticks;
|
||||||
|
long ticks;
|
||||||
char status;
|
char status;
|
||||||
|
|
||||||
TRACE("pata_wait_data_request");
|
TRACE("pata_wait_data_request");
|
||||||
|
|
||||||
|
target_ticks = rtc_get_jiffies() + PATA_TIMEOUT_JF;
|
||||||
do {
|
do {
|
||||||
status = *PATA_CMD_STAT;
|
status = *PATA_CMD_STAT;
|
||||||
} while (((status & PATA_STAT_DRQ) != PATA_STAT_DRQ) && (count-- > 0));
|
ticks = rtc_get_jiffies();
|
||||||
|
} while (((status & PATA_STAT_DRQ) != PATA_STAT_DRQ) && (target_ticks > ticks));
|
||||||
|
|
||||||
if (count == 0) {
|
if (target_ticks <= ticks) {
|
||||||
|
log(LOG_ERROR, "pata_wait_data_request: timeout");
|
||||||
return DEV_TIMEOUT;
|
return DEV_TIMEOUT;
|
||||||
} else {
|
} else {
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -236,12 +265,21 @@ short pata_read(long lba, unsigned char * buffer, short size) {
|
||||||
TRACE("pata_read");
|
TRACE("pata_read");
|
||||||
log_num(LOG_VERBOSE, "pata_read lba: ", lba);
|
log_num(LOG_VERBOSE, "pata_read lba: ", lba);
|
||||||
|
|
||||||
|
/* Turn on the HDD LED */
|
||||||
|
// ind_set(IND_HDC, IND_ON);
|
||||||
|
|
||||||
if (pata_wait_ready_not_busy()) {
|
if (pata_wait_ready_not_busy()) {
|
||||||
|
/* Turn off the HDD LED */
|
||||||
|
// ind_set(IND_HDC, IND_OFF);
|
||||||
|
|
||||||
return DEV_TIMEOUT;
|
return DEV_TIMEOUT;
|
||||||
}
|
}
|
||||||
|
|
||||||
*PATA_HEAD = ((lba >> 24) & 0x07) | 0xe0; // Upper 3 bits of LBA, Drive 0, LBA mode.
|
*PATA_HEAD = ((lba >> 24) & 0x07) | 0xe0; // Upper 3 bits of LBA, Drive 0, LBA mode.
|
||||||
if (pata_wait_ready_not_busy()) {
|
if (pata_wait_ready_not_busy()) {
|
||||||
|
/* Turn off the HDD LED */
|
||||||
|
// ind_set(IND_HDC, IND_OFF);
|
||||||
|
|
||||||
return DEV_TIMEOUT;
|
return DEV_TIMEOUT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -255,10 +293,16 @@ short pata_read(long lba, unsigned char * buffer, short size) {
|
||||||
// TODO: Wait ~500ns
|
// TODO: Wait ~500ns
|
||||||
|
|
||||||
if (pata_wait_ready_not_busy()) {
|
if (pata_wait_ready_not_busy()) {
|
||||||
|
/* Turn off the HDD LED */
|
||||||
|
// ind_set(IND_HDC, IND_OFF);
|
||||||
|
|
||||||
return DEV_TIMEOUT;
|
return DEV_TIMEOUT;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pata_wait_data_request()) {
|
if (pata_wait_data_request()) {
|
||||||
|
/* Turn off the HDD LED */
|
||||||
|
// ind_set(IND_HDC, IND_OFF);
|
||||||
|
|
||||||
return DEV_TIMEOUT;
|
return DEV_TIMEOUT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -267,10 +311,14 @@ short pata_read(long lba, unsigned char * buffer, short size) {
|
||||||
*wptr++ = *PATA_DATA_16;
|
*wptr++ = *PATA_DATA_16;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Turn off the HDD LED */
|
||||||
|
// ind_set(IND_HDC, IND_OFF);
|
||||||
|
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
short pata_flush_cache() {
|
short pata_flush_cache() {
|
||||||
|
long target_ticks;
|
||||||
short i;
|
short i;
|
||||||
unsigned short *wptr;
|
unsigned short *wptr;
|
||||||
unsigned char status;
|
unsigned char status;
|
||||||
|
@ -296,8 +344,9 @@ short pata_flush_cache() {
|
||||||
|
|
||||||
*PATA_CMD_STAT = 0xE7; // PATA_CMD_FLUSH_CACHE;
|
*PATA_CMD_STAT = 0xE7; // PATA_CMD_FLUSH_CACHE;
|
||||||
|
|
||||||
// Give the controller some time...
|
// Give the controller some time (100ms?)...
|
||||||
for (i = 0; i < 32000; i++) ;
|
target_ticks = rtc_get_jiffies() + PATA_WAIT_JF;
|
||||||
|
while (target_ticks > rtc_get_jiffies()) ;
|
||||||
|
|
||||||
if (pata_wait_ready_not_busy()) {
|
if (pata_wait_ready_not_busy()) {
|
||||||
return DEV_TIMEOUT;
|
return DEV_TIMEOUT;
|
||||||
|
@ -329,18 +378,28 @@ short pata_flush_cache() {
|
||||||
// number of chars written, any negative number is an error code
|
// number of chars written, any negative number is an error code
|
||||||
//
|
//
|
||||||
short pata_write(long lba, const unsigned char * buffer, short size) {
|
short pata_write(long lba, const unsigned char * buffer, short size) {
|
||||||
|
long target_ticks;
|
||||||
short i;
|
short i;
|
||||||
unsigned short *wptr;
|
unsigned short *wptr;
|
||||||
unsigned char status;
|
unsigned char status;
|
||||||
TRACE("pata_write");
|
TRACE("pata_write");
|
||||||
|
|
||||||
|
/* Turn on the HDD LED */
|
||||||
|
// ind_set(IND_HDC, IND_ON);
|
||||||
|
|
||||||
if (pata_wait_ready_not_busy()) {
|
if (pata_wait_ready_not_busy()) {
|
||||||
|
/* Turn off the HDD LED */
|
||||||
|
// ind_set(IND_HDC, IND_OFF);
|
||||||
|
|
||||||
return DEV_TIMEOUT;
|
return DEV_TIMEOUT;
|
||||||
}
|
}
|
||||||
|
|
||||||
*PATA_HEAD = ((lba >> 24) & 0x07) | 0xe0; // Upper 3 bits of LBA, Drive 0, LBA mode.
|
*PATA_HEAD = ((lba >> 24) & 0x07) | 0xe0; // Upper 3 bits of LBA, Drive 0, LBA mode.
|
||||||
|
|
||||||
if (pata_wait_ready_not_busy()) {
|
if (pata_wait_ready_not_busy()) {
|
||||||
|
/* Turn off the HDD LED */
|
||||||
|
// ind_set(IND_HDC, IND_OFF);
|
||||||
|
|
||||||
return DEV_TIMEOUT;
|
return DEV_TIMEOUT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -351,10 +410,14 @@ short pata_write(long lba, const unsigned char * buffer, short size) {
|
||||||
|
|
||||||
*PATA_CMD_STAT = PATA_CMD_WRITE_SECTOR; // Issue the WRITE command
|
*PATA_CMD_STAT = PATA_CMD_WRITE_SECTOR; // Issue the WRITE command
|
||||||
|
|
||||||
// Give the controller some time...
|
// Give the controller some time (100ms?)...
|
||||||
for (i = 0; i < 32000; i++) ;
|
target_ticks = rtc_get_jiffies() + PATA_WAIT_JF;
|
||||||
|
while (target_ticks > rtc_get_jiffies()) ;
|
||||||
|
|
||||||
if (pata_wait_ready_not_busy()) {
|
if (pata_wait_ready_not_busy()) {
|
||||||
|
/* Turn off the HDD LED */
|
||||||
|
// ind_set(IND_HDC, IND_OFF);
|
||||||
|
|
||||||
return DEV_TIMEOUT;
|
return DEV_TIMEOUT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -367,6 +430,9 @@ short pata_write(long lba, const unsigned char * buffer, short size) {
|
||||||
for (i = 0; i < 32000; i++) ;
|
for (i = 0; i < 32000; i++) ;
|
||||||
|
|
||||||
if (pata_wait_ready_not_busy()) {
|
if (pata_wait_ready_not_busy()) {
|
||||||
|
/* Turn off the HDD LED */
|
||||||
|
// ind_set(IND_HDC, IND_OFF);
|
||||||
|
|
||||||
return DEV_TIMEOUT;
|
return DEV_TIMEOUT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -376,14 +442,25 @@ short pata_write(long lba, const unsigned char * buffer, short size) {
|
||||||
status = *PATA_CMD_STAT;
|
status = *PATA_CMD_STAT;
|
||||||
if ((status & PATA_STAT_DF) != 0){
|
if ((status & PATA_STAT_DF) != 0){
|
||||||
log(LOG_ERROR, "pata_write: device fault");
|
log(LOG_ERROR, "pata_write: device fault");
|
||||||
|
|
||||||
|
/* Turn off the HDD LED */
|
||||||
|
// ind_set(IND_HDC, IND_OFF);
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((status & PATA_STAT_ERR) != 0) {
|
if ((status & PATA_STAT_ERR) != 0) {
|
||||||
log(LOG_ERROR, "pata_write: error");
|
log(LOG_ERROR, "pata_write: error");
|
||||||
|
|
||||||
|
/* Turn off the HDD LED */
|
||||||
|
// ind_set(IND_HDC, IND_OFF);
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Turn off the HDD LED */
|
||||||
|
// ind_set(IND_HDC, IND_OFF);
|
||||||
|
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
307
src/dev/ps2.c
307
src/dev/ps2.c
|
@ -2,17 +2,22 @@
|
||||||
* Definitions for the PS/2 interface devices... mouse and keyboard
|
* Definitions for the PS/2 interface devices... mouse and keyboard
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "errors.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "ring_buffer.h"
|
#include "ring_buffer.h"
|
||||||
#include "interrupt.h"
|
#include "interrupt.h"
|
||||||
#include "vicky_general.h"
|
#include "vicky_general.h"
|
||||||
#include "dev/ps2.h"
|
#include "dev/ps2.h"
|
||||||
|
#include "dev/rtc.h"
|
||||||
#include "dev/text_screen_iii.h"
|
#include "dev/text_screen_iii.h"
|
||||||
#include "rsrc/bitmaps/mouse_pointer.h"
|
#include "rsrc/bitmaps/mouse_pointer.h"
|
||||||
|
|
||||||
#define PS2_RETRY_MAX 20000 /* For timeout purposes when sending a command */
|
#define PS2_TIMEOUT_JF 10 /* Timeout in jiffies: 1/60 second units */
|
||||||
#define PS2_RESEND_MAX 50 /* Number of times we'll repeat a command on receiving a 0xFE reply */
|
#define PS2_RESEND_MAX 50 /* Number of times we'll repeat a command on receiving a 0xFE reply */
|
||||||
|
#define KBD_XLATE_TABLE_SIZE 128*8 /* Number of characters in the keyboard layout tables */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Modifier bit flags
|
* Modifier bit flags
|
||||||
|
@ -73,6 +78,10 @@ struct s_ps2_kbd {
|
||||||
char * keys_control_shift;
|
char * keys_control_shift;
|
||||||
char * keys_caps;
|
char * keys_caps;
|
||||||
char * keys_caps_shift;
|
char * keys_caps_shift;
|
||||||
|
char * keys_r_alt;
|
||||||
|
char * keys_r_alt_shift;
|
||||||
|
|
||||||
|
char * translation_table;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -83,8 +92,37 @@ struct s_ps2_kbd g_kbd_control;
|
||||||
|
|
||||||
short g_mouse_state = 0; /* Mouse packet state machine's state */
|
short g_mouse_state = 0; /* Mouse packet state machine's state */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Mapping of "codepoints" 0x80 - 0x95 (function keys, etc)
|
||||||
|
* to ANSI escape codes
|
||||||
|
*/
|
||||||
|
const char * ansi_keys[] = {
|
||||||
|
"1~", /* HOME */
|
||||||
|
"2~", /* INS */
|
||||||
|
"3~", /* DELETE */
|
||||||
|
"4~", /* END */
|
||||||
|
"5~", /* PgUp */
|
||||||
|
"6~", /* PgDn */
|
||||||
|
"A", /* Up */
|
||||||
|
"B", /* Left */
|
||||||
|
"C", /* Right */
|
||||||
|
"D", /* Down */
|
||||||
|
"11~", /* F1 */
|
||||||
|
"12~", /* F2 */
|
||||||
|
"13~", /* F3 */
|
||||||
|
"14~", /* F4 */
|
||||||
|
"15~", /* F5 */
|
||||||
|
"17~", /* F6 */
|
||||||
|
"18~", /* F7 */
|
||||||
|
"19~", /* F8 */
|
||||||
|
"20~", /* F9 */
|
||||||
|
"21~", /* F10 */
|
||||||
|
"23~", /* F11 */
|
||||||
|
"24~", /* F12 */
|
||||||
|
};
|
||||||
|
|
||||||
// Translation table from base set1 make scan codes to Foenix scan codes
|
// Translation table from base set1 make scan codes to Foenix scan codes
|
||||||
unsigned char g_kbd_set1_base[128] = {
|
const unsigned char g_kbd_set1_base[128] = {
|
||||||
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00 - 0x07 */
|
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00 - 0x07 */
|
||||||
0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, /* 0x08 - 0x0F */
|
0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, /* 0x08 - 0x0F */
|
||||||
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10 - 0x17 */
|
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10 - 0x17 */
|
||||||
|
@ -104,7 +142,7 @@ unsigned char g_kbd_set1_base[128] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
// Translation table from E0 prefixed set1 make scan codes to Foenix scan codes
|
// Translation table from E0 prefixed set1 make scan codes to Foenix scan codes
|
||||||
unsigned char g_kbd_set1_e0[128] = {
|
const unsigned char g_kbd_set1_e0[128] = {
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00 - 0x07 */
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00 - 0x07 */
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08 - 0x0F */
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08 - 0x0F */
|
||||||
0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10 - 0x17 */
|
0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10 - 0x17 */
|
||||||
|
@ -127,7 +165,7 @@ unsigned char g_kbd_set1_e0[128] = {
|
||||||
* US keyboard layout scancode translation tables
|
* US keyboard layout scancode translation tables
|
||||||
*/
|
*/
|
||||||
|
|
||||||
char g_us_sc_unmodified[] = {
|
const char g_us_sc_unmodified[] = {
|
||||||
0x00, 0x1B, '1', '2', '3', '4', '5', '6', /* 0x00 - 0x07 */
|
0x00, 0x1B, '1', '2', '3', '4', '5', '6', /* 0x00 - 0x07 */
|
||||||
'7', '8', '9', '0', '-', '=', 0x08, 0x09, /* 0x08 - 0x0F */
|
'7', '8', '9', '0', '-', '=', 0x08, 0x09, /* 0x08 - 0x0F */
|
||||||
'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', /* 0x10 - 0x17 */
|
'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', /* 0x10 - 0x17 */
|
||||||
|
@ -146,7 +184,7 @@ char g_us_sc_unmodified[] = {
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* 0x78 - 0x7F */
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* 0x78 - 0x7F */
|
||||||
};
|
};
|
||||||
|
|
||||||
char g_us_sc_shift[] = {
|
const char g_us_sc_shift[] = {
|
||||||
0x00, 0x1B, '!', '@', '#', '$', '%', '^', /* 0x00 - 0x07 */
|
0x00, 0x1B, '!', '@', '#', '$', '%', '^', /* 0x00 - 0x07 */
|
||||||
'&', '*', '(', ')', '_', '+', 0x08, 0x09, /* 0x08 - 0x0F */
|
'&', '*', '(', ')', '_', '+', 0x08, 0x09, /* 0x08 - 0x0F */
|
||||||
'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', /* 0x10 - 0x17 */
|
'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', /* 0x10 - 0x17 */
|
||||||
|
@ -165,7 +203,7 @@ char g_us_sc_shift[] = {
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* 0x78 - 0x7F */
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* 0x78 - 0x7F */
|
||||||
};
|
};
|
||||||
|
|
||||||
char g_us_sc_ctrl[] = {
|
const char g_us_sc_ctrl[] = {
|
||||||
0x00, 0x1B, '1', '2', '3', '4', '5', 0x1E, /* 0x00 - 0x07 */
|
0x00, 0x1B, '1', '2', '3', '4', '5', 0x1E, /* 0x00 - 0x07 */
|
||||||
'7', '8', '9', '0', 0x1F, '=', 0x08, 0x09, /* 0x08 - 0x0F */
|
'7', '8', '9', '0', 0x1F, '=', 0x08, 0x09, /* 0x08 - 0x0F */
|
||||||
0x11, 0x17, 0x05, 0x12, 0x14, 0x19, 0x15, 0x09, /* 0x10 - 0x17 */
|
0x11, 0x17, 0x05, 0x12, 0x14, 0x19, 0x15, 0x09, /* 0x10 - 0x17 */
|
||||||
|
@ -184,7 +222,7 @@ char g_us_sc_ctrl[] = {
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* 0x78 - 0x7F */
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* 0x78 - 0x7F */
|
||||||
};
|
};
|
||||||
|
|
||||||
char g_us_sc_lock[] = {
|
const char g_us_sc_lock[] = {
|
||||||
0x00, 0x1B, '1', '2', '3', '4', '5', '6', /* 0x00 - 0x07 */
|
0x00, 0x1B, '1', '2', '3', '4', '5', '6', /* 0x00 - 0x07 */
|
||||||
'7', '8', '9', '0', '-', '=', 0x08, 0x09, /* 0x08 - 0x0F */
|
'7', '8', '9', '0', '-', '=', 0x08, 0x09, /* 0x08 - 0x0F */
|
||||||
'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', /* 0x10 - 0x17 */
|
'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', /* 0x10 - 0x17 */
|
||||||
|
@ -203,7 +241,7 @@ char g_us_sc_lock[] = {
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* 0x78 - 0x7F */
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* 0x78 - 0x7F */
|
||||||
};
|
};
|
||||||
|
|
||||||
char g_us_sc_lock_shift[] = {
|
const char g_us_sc_lock_shift[] = {
|
||||||
0x00, 0x1B, '!', '@', '#', '$', '%', '^', /* 0x00 - 0x07 */
|
0x00, 0x1B, '!', '@', '#', '$', '%', '^', /* 0x00 - 0x07 */
|
||||||
'&', '*', '(', ')', '_', '+', 0x08, 0x09, /* 0x08 - 0x0F */
|
'&', '*', '(', ')', '_', '+', 0x08, 0x09, /* 0x08 - 0x0F */
|
||||||
'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', /* 0x10 - 0x17 */
|
'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', /* 0x10 - 0x17 */
|
||||||
|
@ -222,7 +260,7 @@ char g_us_sc_lock_shift[] = {
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* 0x78 - 0x7F */
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* 0x78 - 0x7F */
|
||||||
};
|
};
|
||||||
|
|
||||||
char g_us_sc_ctrl_shift[] = {
|
const char g_us_sc_ctrl_shift[] = {
|
||||||
0x00, 0x1B, '!', '@', '#', '$', '%', '^', /* 0x00 - 0x07 */
|
0x00, 0x1B, '!', '@', '#', '$', '%', '^', /* 0x00 - 0x07 */
|
||||||
'&', '*', '(', ')', '_', '+', 0x08, 0x09, /* 0x08 - 0x0F */
|
'&', '*', '(', ')', '_', '+', 0x08, 0x09, /* 0x08 - 0x0F */
|
||||||
0x11, 0x17, 0x05, 0x12, 0x14, 0x19, 0x15, 0x09, /* 0x10 - 0x17 */
|
0x11, 0x17, 0x05, 0x12, 0x14, 0x19, 0x15, 0x09, /* 0x10 - 0x17 */
|
||||||
|
@ -241,6 +279,46 @@ char g_us_sc_ctrl_shift[] = {
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* 0x78 - 0x7F */
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* 0x78 - 0x7F */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Right Alt */
|
||||||
|
const char g_us_sc_alt[] = {
|
||||||
|
0x00, 0x1B, '1', '2', 0x9C, 0x9E, '5', '6', /* 0x00 - 0x07 ... British Pound, and Euro */
|
||||||
|
'7', '8', '9', '0', '-', '=', 0x08, 0x09, /* 0x08 - 0x0F */
|
||||||
|
'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', /* 0x10 - 0x17 */
|
||||||
|
'o', 'p', '[', ']', 0x0D, 0x00, 'a', 's', /* 0x18 - 0x1F */
|
||||||
|
'd', 'f', 'g', 'h', 'j', 'k', 'l', ';', /* 0x20 - 0x27 */
|
||||||
|
0x27, '`', 0x00, '\\', 'z', 'x', 'c', 'v', /* 0x28 - 0x2F */
|
||||||
|
'b', 'n', 'm', ',', '.', '/', 0x00, '*', /* 0x30 - 0x37 */
|
||||||
|
0x00, ' ', 0x00, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, /* 0x38 - 0x3F */
|
||||||
|
0x8F, 0x90, 0x91, 0x92, 0x93, 0x00, 0x00, 0x80, /* 0x40 - 0x47 */
|
||||||
|
0x86, 0x84, '-', 0x89, '5', 0x88, '+', 0x83, /* 0x48 - 0x4F */
|
||||||
|
0x87, 0x85, 0x81, 0x82, 0x00, 0x00, 0x00, 0x94, /* 0x50 - 0x57 */
|
||||||
|
0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58 - 0x5F */
|
||||||
|
0x00, 0x00, 0x81, 0x80, 0x84, 0x82, 0x83, 0x85, /* 0x60 - 0x67 */
|
||||||
|
0x86, 0x89, 0x87, 0x88, '/', 0x0D, 0x00, 0x00, /* 0x68 - 0x6F */
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70 - 0x77 */
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* 0x78 - 0x7F */
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Right Alt and Shift/CAPS */
|
||||||
|
const char g_us_sc_alt_shift[] = {
|
||||||
|
0x00, 0x1B, '1', '2', 0x9C, 0x9E, '5', '6', /* 0x00 - 0x07 */
|
||||||
|
'7', '8', '9', '0', '-', '=', 0x08, 0x09, /* 0x08 - 0x0F */
|
||||||
|
'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', /* 0x10 - 0x17 */
|
||||||
|
'O', 'P', '[', ']', 0x0D, 0x00, 'A', 'S', /* 0x18 - 0x1F */
|
||||||
|
'D', 'F', 'G', 'H', 'J', 'K', 'L', ';', /* 0x20 - 0x27 */
|
||||||
|
0x27, '`', 0x00, '\\', 'Z', 'X', 'C', 'V', /* 0x28 - 0x2F */
|
||||||
|
'B', 'N', 'M', ',', '.', '/', 0x00, '*', /* 0x30 - 0x37 */
|
||||||
|
0x00, ' ', 0x00, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, /* 0x38 - 0x3F */
|
||||||
|
0x8F, 0x90, 0x91, 0x92, 0x93, 0x00, 0x00, 0x80, /* 0x40 - 0x47 */
|
||||||
|
0x86, 0x84, '-', 0x89, '5', 0x88, '+', 0x83, /* 0x48 - 0x4F */
|
||||||
|
0x87, 0x85, 0x81, 0x82, 0x00, 0x00, 0x00, 0x94, /* 0x50 - 0x57 */
|
||||||
|
0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58 - 0x5F */
|
||||||
|
0x00, 0x00, 0x81, 0x80, 0x84, 0x82, 0x83, 0x85, /* 0x60 - 0x67 */
|
||||||
|
0x86, 0x89, 0x87, 0x88, '/', 0x0D, 0x00, 0x00, /* 0x68 - 0x6F */
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70 - 0x77 */
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* 0x78 - 0x7F */
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Code...
|
* Code...
|
||||||
*/
|
*/
|
||||||
|
@ -252,10 +330,13 @@ char g_us_sc_ctrl_shift[] = {
|
||||||
* 0 if successful, -1 if there was no response after PS2_RETRY_MAX tries
|
* 0 if successful, -1 if there was no response after PS2_RETRY_MAX tries
|
||||||
*/
|
*/
|
||||||
short ps2_wait_out() {
|
short ps2_wait_out() {
|
||||||
short count = 0;
|
long target_ticks;
|
||||||
|
|
||||||
|
log(LOG_TRACE, "ps2_wait_out");
|
||||||
|
|
||||||
|
target_ticks = rtc_get_jiffies() + PS2_TIMEOUT_JF;
|
||||||
while ((*PS2_STATUS & PS2_STAT_OBF) == 0) {
|
while ((*PS2_STATUS & PS2_STAT_OBF) == 0) {
|
||||||
if (count++ > PS2_RETRY_MAX) {
|
if (rtc_get_jiffies() > target_ticks) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -270,10 +351,13 @@ short ps2_wait_out() {
|
||||||
* 0 if successful, -1 if there was no response after PS2_RETRY_MAX tries
|
* 0 if successful, -1 if there was no response after PS2_RETRY_MAX tries
|
||||||
*/
|
*/
|
||||||
short ps2_wait_in() {
|
short ps2_wait_in() {
|
||||||
short count = 0;
|
long target_ticks;
|
||||||
|
|
||||||
|
log(LOG_TRACE, "ps2_wait_in");
|
||||||
|
|
||||||
|
target_ticks = rtc_get_jiffies() + PS2_TIMEOUT_JF;
|
||||||
while ((*PS2_STATUS & PS2_STAT_IBF) != 0) {
|
while ((*PS2_STATUS & PS2_STAT_IBF) != 0) {
|
||||||
if (count++ > PS2_RETRY_MAX) {
|
if (rtc_get_jiffies() > target_ticks) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -633,6 +717,58 @@ void kbd_handle_irq() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Catch special keys and convert them to their ANSI terminal codes
|
||||||
|
*
|
||||||
|
* Characters 0x80 - 0x95 are reserved for function keys, arrow keys, etc.
|
||||||
|
* This function maps them to the ANSI escape codes
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* modifiers = the current modifier bit flags (ALT, CTRL, META, etc)
|
||||||
|
* c = the character found from the scan code.
|
||||||
|
*/
|
||||||
|
char kbd_to_ansi(unsigned char modifiers, unsigned char c) {
|
||||||
|
if ((c >= 0x80) && (c <= 0x95)) {
|
||||||
|
/* The key is a function key or a special control key */
|
||||||
|
const char * sequence;
|
||||||
|
|
||||||
|
/* After ESC, all sequences have [ */
|
||||||
|
rb_word_put(&g_kbd_control.char_buf, '[');
|
||||||
|
|
||||||
|
/* Check to see if we need to send a modifier sequence */
|
||||||
|
if (modifiers & (KBD_MOD_SHIFT | KBD_MOD_CTRL | KBD_MOD_ALT | KBD_MOD_OS)) {
|
||||||
|
unsigned char code_bcd;
|
||||||
|
short modifier_code = 0;
|
||||||
|
short i;
|
||||||
|
|
||||||
|
modifier_code = (modifiers >> 2) & 0x0E;
|
||||||
|
code_bcd = i_to_bcd(modifier_code);
|
||||||
|
|
||||||
|
if (code_bcd & 0xF0) {
|
||||||
|
rb_word_put(&g_kbd_control.char_buf, ((code_bcd & 0xF0) >> 4) + '0');
|
||||||
|
}
|
||||||
|
rb_word_put(&g_kbd_control.char_buf, (code_bcd & 0x0F) + '0');
|
||||||
|
rb_word_put(&g_kbd_control.char_buf, ';');
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Get the expanded sequence and put it in the queue */
|
||||||
|
for (sequence = ansi_keys[c - 0x80]; *sequence != 0; sequence++) {
|
||||||
|
rb_word_put(&g_kbd_control.char_buf, *sequence);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0x1B; /* Start the sequence with an escape */
|
||||||
|
|
||||||
|
} else if (c == 0x1B) {
|
||||||
|
/* ESC should be doubled, to distinguish from the start of an escape sequence */
|
||||||
|
rb_word_put(&g_kbd_control.char_buf, 0x1B);
|
||||||
|
return c;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
/* Not a special key: return the character unmodified */
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Try to get a character from the keyboard...
|
* Try to get a character from the keyboard...
|
||||||
*
|
*
|
||||||
|
@ -659,42 +795,53 @@ char kbd_getc() {
|
||||||
|
|
||||||
// Check the modifiers to see what we should lookup...
|
// Check the modifiers to see what we should lookup...
|
||||||
|
|
||||||
if ((modifiers & (KBD_MOD_SHIFT | KBD_MOD_CTRL | KBD_LOCK_CAPS)) == 0) {
|
if ((modifiers & (KBD_MOD_SHIFT | KBD_MOD_CTRL | KBD_LOCK_CAPS | KBD_MOD_ALT)) == 0) {
|
||||||
// No modifiers... just return the base character
|
// No modifiers... just return the base character
|
||||||
return g_kbd_control.keys_unmodified[scan_code];
|
return kbd_to_ansi(modifiers, g_kbd_control.keys_unmodified[scan_code]);
|
||||||
|
|
||||||
|
} else if (modifiers & KBD_MOD_ALT) {
|
||||||
|
if ((( (modifiers & KBD_MOD_SHIFT) == 0) && ((modifiers & KBD_LOCK_CAPS) != 0)) ||
|
||||||
|
(( (modifiers & KBD_MOD_SHIFT) != 0) && ((modifiers & KBD_LOCK_CAPS) == 0))) {
|
||||||
|
/* Either SHIFT or CAPSLOCK is active, but not both */
|
||||||
|
return g_kbd_control.keys_r_alt_shift[scan_code];
|
||||||
|
|
||||||
|
} else {
|
||||||
|
/* No shift, or both SHIFT and CAPS are active */
|
||||||
|
return g_kbd_control.keys_r_alt[scan_code];
|
||||||
|
}
|
||||||
|
|
||||||
} else if (modifiers & KBD_MOD_CTRL) {
|
} else if (modifiers & KBD_MOD_CTRL) {
|
||||||
// If CTRL is pressed...
|
// If CTRL is pressed...
|
||||||
if (modifiers & KBD_MOD_SHIFT) {
|
if (modifiers & KBD_MOD_SHIFT) {
|
||||||
// If SHIFT is also pressed, return CTRL-SHIFT form
|
// If SHIFT is also pressed, return CTRL-SHIFT form
|
||||||
return g_kbd_control.keys_control_shift[scan_code];
|
return kbd_to_ansi(modifiers, g_kbd_control.keys_control_shift[scan_code]);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// Otherwise, return just CTRL form
|
// Otherwise, return just CTRL form
|
||||||
return g_kbd_control.keys_control[scan_code];
|
return kbd_to_ansi(modifiers, g_kbd_control.keys_control[scan_code]);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (modifiers & KBD_LOCK_CAPS) {
|
} else if (modifiers & KBD_LOCK_CAPS) {
|
||||||
// If CAPS is locked...
|
// If CAPS is locked...
|
||||||
if (modifiers & KBD_MOD_SHIFT) {
|
if (modifiers & KBD_MOD_SHIFT) {
|
||||||
// If SHIFT is also pressed, return CAPS-SHIFT form
|
// If SHIFT is also pressed, return CAPS-SHIFT form
|
||||||
return g_kbd_control.keys_caps_shift[scan_code];
|
return kbd_to_ansi(modifiers, g_kbd_control.keys_caps_shift[scan_code]);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// Otherwise, return just CAPS form
|
// Otherwise, return just CAPS form
|
||||||
return g_kbd_control.keys_caps[scan_code];
|
return kbd_to_ansi(modifiers, g_kbd_control.keys_caps[scan_code]);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// SHIFT is pressed, return SHIFT form
|
// SHIFT is pressed, return SHIFT form
|
||||||
return g_kbd_control.keys_shift[scan_code];
|
return kbd_to_ansi(modifiers, g_kbd_control.keys_shift[scan_code]);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// It's on the right side of the keyboard, NUMLOCK determines lock value
|
// It's on the right side of the keyboard, NUMLOCK determines lock value
|
||||||
|
|
||||||
// TODO: flesh this out...
|
// TODO: flesh this out...
|
||||||
return g_kbd_control.keys_unmodified[scan_code];
|
return kbd_to_ansi(modifiers, g_kbd_control.keys_unmodified[scan_code]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -712,14 +859,12 @@ char kbd_getc() {
|
||||||
* Handle an interrupt from the PS/2 mouse port
|
* Handle an interrupt from the PS/2 mouse port
|
||||||
*/
|
*/
|
||||||
void mouse_handle_irq() {
|
void mouse_handle_irq() {
|
||||||
unsigned char status = *PS2_STATUS;
|
//unsigned char status = *PS2_STATUS;
|
||||||
unsigned char mouse_byte = *PS2_DATA_BUF;
|
unsigned char mouse_byte = *PS2_DATA_BUF;
|
||||||
|
|
||||||
/* Clear the pending interrupt flag for the mouse */
|
/* Clear the pending interrupt flag for the mouse */
|
||||||
int_clear(INT_MOUSE);
|
int_clear(INT_MOUSE);
|
||||||
|
|
||||||
*ScreenText_A = *ScreenText_A + 1;
|
|
||||||
|
|
||||||
if ((g_mouse_state == 0) && ((mouse_byte & 0x08) != 0x08)) {
|
if ((g_mouse_state == 0) && ((mouse_byte & 0x08) != 0x08)) {
|
||||||
/*
|
/*
|
||||||
* If this is the first byte in the packet, bit 4 must be set
|
* If this is the first byte in the packet, bit 4 must be set
|
||||||
|
@ -793,7 +938,7 @@ short ps2_mouse_get_packet() {
|
||||||
|
|
||||||
result = ps2_mouse_command(MOUSE_CMD_REQPACK);
|
result = ps2_mouse_command(MOUSE_CMD_REQPACK);
|
||||||
if (result == -1) {
|
if (result == -1) {
|
||||||
log_num(LOG_ERROR, "MOUSE_CMD_REQPACK: ", result);
|
log_num(LOG_INFO, "MOUSE_CMD_REQPACK: ", result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -853,7 +998,7 @@ short mouse_init() {
|
||||||
|
|
||||||
result = ps2_mouse_command(MOUSE_CMD_RESET);
|
result = ps2_mouse_command(MOUSE_CMD_RESET);
|
||||||
if (result == -1) {
|
if (result == -1) {
|
||||||
log_num(LOG_ERROR, "MOUSE_CMD_RESET: ", result);
|
log_num(LOG_INFO, "MOUSE_CMD_RESET: ", result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -861,7 +1006,7 @@ short mouse_init() {
|
||||||
|
|
||||||
result = ps2_mouse_command_repeatable(MOUSE_CMD_DISABLE);
|
result = ps2_mouse_command_repeatable(MOUSE_CMD_DISABLE);
|
||||||
if (result != PS2_RESP_ACK) {
|
if (result != PS2_RESP_ACK) {
|
||||||
log_num(LOG_ERROR, "MOUSE_CMD_DISABLE: ", result);
|
log_num(LOG_INFO, "MOUSE_CMD_DISABLE: ", result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -869,7 +1014,7 @@ short mouse_init() {
|
||||||
|
|
||||||
result = ps2_mouse_command_repeatable(MOUSE_CMD_DEFAULTS);
|
result = ps2_mouse_command_repeatable(MOUSE_CMD_DEFAULTS);
|
||||||
if (result != PS2_RESP_ACK) {
|
if (result != PS2_RESP_ACK) {
|
||||||
log_num(LOG_ERROR, "MOUSE_CMD_DEFAULTS: ", result);
|
log_num(LOG_INFO, "MOUSE_CMD_DEFAULTS: ", result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -877,13 +1022,13 @@ short mouse_init() {
|
||||||
|
|
||||||
result = ps2_mouse_command_repeatable(MOUSE_CMD_SETRES);
|
result = ps2_mouse_command_repeatable(MOUSE_CMD_SETRES);
|
||||||
if (result != PS2_RESP_ACK) {
|
if (result != PS2_RESP_ACK) {
|
||||||
log_num(LOG_ERROR, "MOUSE_CMD_SETRES: ", result);
|
log_num(LOG_INFO, "MOUSE_CMD_SETRES: ", result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = ps2_mouse_command_repeatable(0x00);
|
result = ps2_mouse_command_repeatable(0x00);
|
||||||
if (result != PS2_RESP_ACK) {
|
if (result != PS2_RESP_ACK) {
|
||||||
log_num(LOG_ERROR, "MOUSE_CMD_SETRES resolution: ", result);
|
log_num(LOG_INFO, "MOUSE_CMD_SETRES resolution: ", result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -891,19 +1036,22 @@ short mouse_init() {
|
||||||
|
|
||||||
result = ps2_mouse_command_repeatable(MOUSE_CMD_ENABLE);
|
result = ps2_mouse_command_repeatable(MOUSE_CMD_ENABLE);
|
||||||
if (result != PS2_RESP_ACK) {
|
if (result != PS2_RESP_ACK) {
|
||||||
log_num(LOG_ERROR, "MOUSE_CMD_ENABLE: ", result);
|
log_num(LOG_INFO, "MOUSE_CMD_ENABLE: ", result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set up the mouse pointer */
|
/* Set up the mouse pointer */
|
||||||
|
|
||||||
|
short src_offset = 0;
|
||||||
|
short dest_offset = 0;
|
||||||
for (i = 0; i < 256; i++) {
|
for (i = 0; i < 256; i++) {
|
||||||
short src_offset = 3*i;
|
low_components = (Color_Pointer_bin[src_offset+1] << 8) + Color_Pointer_bin[src_offset];
|
||||||
short dest_offset = 2*i;
|
|
||||||
low_components = Color_Pointer_bin[src_offset+1] << 8 + Color_Pointer_bin[src_offset];
|
|
||||||
hi_components = Color_Pointer_bin[src_offset+2];
|
hi_components = Color_Pointer_bin[src_offset+2];
|
||||||
MousePointer_Mem_A[dest_offset] = low_components;
|
MousePointer_Mem_A[dest_offset] = low_components;
|
||||||
MousePointer_Mem_A[dest_offset+1] = hi_components;
|
MousePointer_Mem_A[dest_offset+1] = hi_components;
|
||||||
|
|
||||||
|
src_offset += 3;
|
||||||
|
dest_offset += 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Enable the mouse pointer on channel A */
|
/* Enable the mouse pointer on channel A */
|
||||||
|
@ -912,6 +1060,81 @@ short mouse_init() {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set the keyboard translation tables
|
||||||
|
*
|
||||||
|
* The translation tables provided to the keyboard consist of eight
|
||||||
|
* consecutive tables of 128 characters each. Each table maps from
|
||||||
|
* the MAKE scan code of a key to its appropriate 8-bit character code.
|
||||||
|
*
|
||||||
|
* The tables included must include, in order:
|
||||||
|
* - UNMODIFIED: Used when no modifier keys are pressed or active
|
||||||
|
* - SHIFT: Used when the SHIFT modifier is pressed
|
||||||
|
* - CTRL: Used when the CTRL modifier is pressed
|
||||||
|
* - CTRL-SHIFT: Used when both CTRL and SHIFT are pressed
|
||||||
|
* - CAPSLOCK: Used when CAPSLOCK is down but SHIFT is not pressed
|
||||||
|
* - CAPSLOCK-SHIFT: Used when CAPSLOCK is down and SHIFT is pressed
|
||||||
|
* - ALT: Used when only ALT is presse
|
||||||
|
* - ALT-SHIFT: Used when ALT is pressed and either CAPSLOCK is down
|
||||||
|
* or SHIFT is pressed (but not both)
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* tables = pointer to the keyboard translation tables (0 to reset to default)
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, a negative number if there was an error
|
||||||
|
*/
|
||||||
|
short kbd_layout(const char * tables) {
|
||||||
|
short i;
|
||||||
|
|
||||||
|
/* Are we resetting the tables? */
|
||||||
|
if (tables == 0) {
|
||||||
|
/* Yes... free the old table if needed */
|
||||||
|
if (g_kbd_control.translation_table != 0) {
|
||||||
|
free(g_kbd_control.translation_table);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Reset the translation tables to their default values */
|
||||||
|
g_kbd_control.keys_unmodified = g_us_sc_unmodified;
|
||||||
|
g_kbd_control.keys_shift = g_us_sc_shift;
|
||||||
|
g_kbd_control.keys_control = g_us_sc_ctrl;
|
||||||
|
g_kbd_control.keys_control_shift = g_us_sc_ctrl_shift;
|
||||||
|
g_kbd_control.keys_caps = g_us_sc_lock;
|
||||||
|
g_kbd_control.keys_caps_shift = g_us_sc_lock_shift;
|
||||||
|
g_kbd_control.keys_r_alt = g_us_sc_alt;
|
||||||
|
g_kbd_control.keys_r_alt_shift = g_us_sc_alt_shift;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
/* No: we're setting new tables */
|
||||||
|
|
||||||
|
/* Allocate a space for all the tables in the kernel's memory, if we don't have one already */
|
||||||
|
if (g_kbd_control.translation_table == 0) {
|
||||||
|
g_kbd_control.translation_table = (char *)malloc(KBD_XLATE_TABLE_SIZE);
|
||||||
|
if (g_kbd_control.translation_table == 0) {
|
||||||
|
/* We couldn't allocate... return out of memory */
|
||||||
|
return ERR_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Copy the tables into kernel memory */
|
||||||
|
for (i = 0; i < KBD_XLATE_TABLE_SIZE; i++) {
|
||||||
|
g_kbd_control.translation_table[i] = tables[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set the lookup tables to the individual tables in the collection */
|
||||||
|
g_kbd_control.keys_unmodified = g_kbd_control.translation_table;
|
||||||
|
g_kbd_control.keys_shift = g_kbd_control.keys_unmodified + 128;
|
||||||
|
g_kbd_control.keys_control = g_kbd_control.keys_shift + 128;
|
||||||
|
g_kbd_control.keys_control_shift = g_kbd_control.keys_control + 128;
|
||||||
|
g_kbd_control.keys_caps = g_kbd_control.keys_control_shift + 128;
|
||||||
|
g_kbd_control.keys_caps_shift = g_kbd_control.keys_caps + 128;
|
||||||
|
g_kbd_control.keys_r_alt = g_kbd_control.keys_caps_shift + 128;
|
||||||
|
g_kbd_control.keys_r_alt_shift = g_kbd_control.keys_r_alt + 128;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialize the PS2 controller and any attached devices
|
* Initialize the PS2 controller and any attached devices
|
||||||
* Enable keyboard and mouse interrupts as appropriate.
|
* Enable keyboard and mouse interrupts as appropriate.
|
||||||
|
@ -939,6 +1162,9 @@ short ps2_init() {
|
||||||
g_kbd_control.keys_control_shift = g_us_sc_ctrl_shift;
|
g_kbd_control.keys_control_shift = g_us_sc_ctrl_shift;
|
||||||
g_kbd_control.keys_caps = g_us_sc_lock;
|
g_kbd_control.keys_caps = g_us_sc_lock;
|
||||||
g_kbd_control.keys_caps_shift = g_us_sc_lock_shift;
|
g_kbd_control.keys_caps_shift = g_us_sc_lock_shift;
|
||||||
|
g_kbd_control.keys_r_alt = g_us_sc_alt;
|
||||||
|
g_kbd_control.keys_r_alt_shift = g_us_sc_alt_shift;
|
||||||
|
g_kbd_control.translation_table = 0;
|
||||||
|
|
||||||
// Disable the PS/2 interrupts...
|
// Disable the PS/2 interrupts...
|
||||||
|
|
||||||
|
@ -987,7 +1213,7 @@ short ps2_init() {
|
||||||
if (mouse_present) {
|
if (mouse_present) {
|
||||||
/* Initialize the mouse */
|
/* Initialize the mouse */
|
||||||
if (mouse_error = mouse_init()) {
|
if (mouse_error = mouse_init()) {
|
||||||
log_num(LOG_ERROR, "Unable to initialize mouse", res);
|
log_num(LOG_INFO, "Unable to initialize mouse", res);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1021,12 +1247,3 @@ short ps2_init() {
|
||||||
|
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
char kbd_getc_poll() {
|
|
||||||
if (ps2_wait_out() == 0) {
|
|
||||||
kbd_handle_irq();
|
|
||||||
return kbd_getc();
|
|
||||||
} else {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -44,7 +44,28 @@ extern unsigned short kbd_get_scancode();
|
||||||
*/
|
*/
|
||||||
extern char kbd_getc();
|
extern char kbd_getc();
|
||||||
|
|
||||||
extern char kbd_getc_poll();
|
/*
|
||||||
|
* Set the keyboard translation tables
|
||||||
|
*
|
||||||
|
* The translation tables provided to the keyboard consist of eight
|
||||||
|
* consecutive tables of 128 characters each. Each table maps from
|
||||||
|
* the MAKE scan code of a key to its appropriate 8-bit character code.
|
||||||
|
*
|
||||||
|
* The tables included must include, in order:
|
||||||
|
* - UNMODIFIED: Used when no modifier keys are pressed or active
|
||||||
|
* - SHIFT: Used when the SHIFT modifier is pressed
|
||||||
|
* - CTRL: Used when the CTRL modifier is pressed
|
||||||
|
* - CTRL-SHIFT: Used when both CTRL and SHIFT are pressed
|
||||||
|
* - CAPSLOCK: Used when CAPSLOCK is down but SHIFT is not pressed
|
||||||
|
* - CAPSLOCK-SHIFT: Used when CAPSLOCK is down and SHIFT is pressed
|
||||||
|
* - ALT: Used when only ALT is presse
|
||||||
|
* - ALT-SHIFT: Used when ALT is pressed and either CAPSLOCK is down
|
||||||
|
* or SHIFT is pressed (but not both)
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* tables = pointer to the keyboard translation tables
|
||||||
|
*/
|
||||||
|
extern short kbd_layout(const char * tables);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Query the mouse for an update packet (use if we aren't using interrupts)
|
* Query the mouse for an update packet (use if we aren't using interrupts)
|
||||||
|
|
|
@ -4,9 +4,10 @@
|
||||||
|
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "interrupt.h"
|
#include "interrupt.h"
|
||||||
|
#include "gabe_reg.h"
|
||||||
#include "rtc.h"
|
#include "rtc.h"
|
||||||
#include "rtc_reg.h"
|
#include "rtc_reg.h"
|
||||||
#include "simpleio.h"
|
#include "timers.h"
|
||||||
|
|
||||||
static long rtc_ticks;
|
static long rtc_ticks;
|
||||||
|
|
||||||
|
@ -16,41 +17,57 @@ static long rtc_ticks;
|
||||||
void rtc_handle_int() {
|
void rtc_handle_int() {
|
||||||
unsigned char flags;
|
unsigned char flags;
|
||||||
|
|
||||||
flags = *RTC_FLAGS;
|
/* Periodic interrupt: increment the ticks counter */
|
||||||
if (flags | RTC_PF) {
|
rtc_ticks++;
|
||||||
/* Peridic interrupt: increment the ticks counter */
|
|
||||||
rtc_ticks++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialize the RTC
|
* Initialize the RTC
|
||||||
*/
|
*/
|
||||||
void rtc_init() {
|
void rtc_init() {
|
||||||
|
unsigned char flags;
|
||||||
unsigned char rates;
|
unsigned char rates;
|
||||||
unsigned char enables;
|
unsigned char enables;
|
||||||
|
|
||||||
// int_disable(INT_RTC);
|
log(LOG_TRACE, "rtc_init");
|
||||||
//
|
|
||||||
// /* Reset the ticks counter */
|
int_disable(INT_RTC);
|
||||||
// rtc_ticks = 0;
|
|
||||||
//
|
|
||||||
// /* Set the periodic interrupt to 976.5625 microseconds */
|
|
||||||
// *RTC_RATES = (*RTC_RATES & RTC_RATES_WD) | RTC_RATE_976us;
|
|
||||||
//
|
|
||||||
// /* Enable the periodic interrupt */
|
|
||||||
*RTC_RATES = 0;
|
|
||||||
*RTC_ENABLES = 0; // RTC_PIE;
|
|
||||||
|
|
||||||
/* Make sure the RTC is on */
|
/* Make sure the RTC is on */
|
||||||
*RTC_CTRL = RTC_STOP;
|
*RTC_CTRL = RTC_STOP;
|
||||||
|
|
||||||
/* Register our interrupt handler and clear out any pending interrupts */
|
/*
|
||||||
|
* For the moment: Every so often, the RTC interrupt gets acknowledged
|
||||||
|
* without clearing the flags. Until I can sort out why, I will use
|
||||||
|
* the SOF A interrupt as a surrogate for the RTC jiffie timer
|
||||||
|
*/
|
||||||
|
|
||||||
|
// /* Set the periodic interrupt to 15 millisecs */
|
||||||
|
// *RTC_RATES = RTC_RATE_15ms;
|
||||||
|
|
||||||
// int_register(INT_RTC, rtc_handle_int);
|
// int_register(INT_RTC, rtc_handle_int);
|
||||||
// int_clear(INT_RTC);
|
|
||||||
|
/* Enable the periodic interrupt */
|
||||||
|
// flags = *RTC_FLAGS;
|
||||||
|
// *RTC_ENABLES = RTC_PIE;
|
||||||
|
|
||||||
// int_enable(INT_RTC);
|
// int_enable(INT_RTC);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Make sure the RTC tick counter is enabled
|
||||||
|
*/
|
||||||
|
void rtc_enable_ticks() {
|
||||||
|
/* Set the periodic interrupt to 15 millisecs */
|
||||||
|
*RTC_RATES = RTC_RATE_15ms;
|
||||||
|
|
||||||
|
unsigned char flags = *RTC_FLAGS;
|
||||||
|
|
||||||
|
*RTC_ENABLES = RTC_PIE;
|
||||||
|
|
||||||
|
int_enable(INT_RTC);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set the time on the RTC
|
* Set the time on the RTC
|
||||||
*
|
*
|
||||||
|
@ -205,22 +222,15 @@ void rtc_get_time(p_time time) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Get the number of ticks since the system last booted.
|
* Get the number of jiffies since the system last booted.
|
||||||
*
|
*
|
||||||
* NOTE: a tick is almost, but not quite, 1ms. The RTC periodic interrupt
|
* NOTE: a jiffie is 1/60 of a second. This timer will not be
|
||||||
* period does not line up with a 1ms timer, but it comes close.
|
* 100% precise, so it should be used for timeout purposes
|
||||||
* Therefore, a tick will be 976.5625 microseconds... a little faster
|
* where precision is not critical.
|
||||||
* than 1ms.
|
|
||||||
*
|
*
|
||||||
* Returns:
|
* Returns:
|
||||||
* the number of ticks since the last reset
|
* the number of jiffies since the last reset
|
||||||
*/
|
*/
|
||||||
long rtc_get_ticks() {
|
long rtc_get_jiffies() {
|
||||||
long result = 0;
|
return timers_jiffies();
|
||||||
|
|
||||||
int_disable(INT_RTC); /* Make sure we aren't changing the tick counter during the query */
|
|
||||||
result = rtc_ticks;
|
|
||||||
int_enable(INT_RTC);
|
|
||||||
|
|
||||||
return rtc_ticks;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,11 @@ typedef struct s_time {
|
||||||
*/
|
*/
|
||||||
extern void rtc_init();
|
extern void rtc_init();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Make sure the RTC tick counter is enabled
|
||||||
|
*/
|
||||||
|
extern void rtc_enable_ticks();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set the time on the RTC
|
* Set the time on the RTC
|
||||||
*
|
*
|
||||||
|
@ -38,16 +43,15 @@ extern void rtc_set_time(p_time time);
|
||||||
extern void rtc_get_time(p_time time);
|
extern void rtc_get_time(p_time time);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Get the number of ticks since the system last booted.
|
* Get the number of jiffies since the system last booted.
|
||||||
*
|
*
|
||||||
* NOTE: a tick is almost, but not quite, 1ms. The RTC periodic interrupt
|
* NOTE: a jiffie is 1/60 of a second. This timer will not be
|
||||||
* period does not line up with a 1ms timer, but it comes close.
|
* 100% precise, so it should be used for timeout purposes
|
||||||
* Therefore, a tick will be 976.5625 microseconds... a little faster
|
* where precision is not critical.
|
||||||
* than 1ms.
|
|
||||||
*
|
*
|
||||||
* Returns:
|
* Returns:
|
||||||
* the number of ticks since the last reset
|
* the number of jiffies since the last reset
|
||||||
*/
|
*/
|
||||||
extern long rtc_get_ticks();
|
extern long rtc_get_jiffies();
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -3,14 +3,22 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
// #include "fatfs/ff.h"
|
|
||||||
#include "constants.h"
|
#include "constants.h"
|
||||||
#include "errors.h"
|
#include "errors.h"
|
||||||
|
#include "gabe_reg.h"
|
||||||
|
#include "indicators.h"
|
||||||
#include "dev/block.h"
|
#include "dev/block.h"
|
||||||
#include "sdc_reg.h"
|
#include "sdc_reg.h"
|
||||||
|
#include "dev/rtc.h"
|
||||||
#include "dev/sdc.h"
|
#include "dev/sdc.h"
|
||||||
#include "dev/text_screen_iii.h"
|
#include "dev/text_screen_iii.h"
|
||||||
|
|
||||||
|
//
|
||||||
|
// Constants
|
||||||
|
//
|
||||||
|
|
||||||
|
#define SDC_TIMEOUT_JF 20 /* Timeout in jiffies (1/60 second) */
|
||||||
|
|
||||||
unsigned char g_sdc_status = SDC_STAT_NOINIT;
|
unsigned char g_sdc_status = SDC_STAT_NOINIT;
|
||||||
unsigned char g_sdc_error = 0;
|
unsigned char g_sdc_error = 0;
|
||||||
|
|
||||||
|
@ -51,13 +59,11 @@ short sdc_protected() {
|
||||||
// is_on = if 0, turn the LED off, otherwise turn the LED on
|
// is_on = if 0, turn the LED off, otherwise turn the LED on
|
||||||
//
|
//
|
||||||
void sdc_set_led(short is_on) {
|
void sdc_set_led(short is_on) {
|
||||||
// volatile unsigned char *gabe_control = (unsigned char *)GABE_MSTR_CTRL;
|
if (is_on) {
|
||||||
//
|
*GABE_CTRL_REG = *GABE_CTRL_REG | SDCARD_LED;
|
||||||
// if (is_on) {
|
} else {
|
||||||
// *gabe_control = *gabe_control | GABE_CTRL_SDC_LED;
|
*GABE_CTRL_REG = *GABE_CTRL_REG & ~SDCARD_LED;
|
||||||
// } else {
|
}
|
||||||
// *gabe_control = *gabe_control & ~GABE_CTRL_SDC_LED;
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -67,11 +73,13 @@ void sdc_set_led(short is_on) {
|
||||||
// 0 on success, DEV_TIMEOUT on timeout
|
// 0 on success, DEV_TIMEOUT on timeout
|
||||||
//
|
//
|
||||||
short sdc_wait_busy() {
|
short sdc_wait_busy() {
|
||||||
|
long timer_ticks;
|
||||||
int retry_count = MAX_TRIES_BUSY;
|
int retry_count = MAX_TRIES_BUSY;
|
||||||
unsigned char status;
|
unsigned char status;
|
||||||
|
|
||||||
|
timer_ticks = rtc_get_jiffies() + SDC_TIMEOUT_JF;
|
||||||
do {
|
do {
|
||||||
if (retry_count-- == 0) {
|
if (rtc_get_jiffies() > timer_ticks) {
|
||||||
// If we have run out of tries, return a TIMEOUT error
|
// If we have run out of tries, return a TIMEOUT error
|
||||||
return DEV_TIMEOUT;
|
return DEV_TIMEOUT;
|
||||||
}
|
}
|
||||||
|
@ -145,7 +153,8 @@ short sdc_read(long lba, unsigned char * buffer, short size) {
|
||||||
return DEV_NOMEDIA;
|
return DEV_NOMEDIA;
|
||||||
}
|
}
|
||||||
|
|
||||||
sdc_set_led(1); // Turn on the SDC LED
|
/* Turn on the SDC LED */
|
||||||
|
ind_set(IND_SDC, IND_ON);
|
||||||
|
|
||||||
// Send the LBA to the SDC
|
// Send the LBA to the SDC
|
||||||
|
|
||||||
|
@ -164,7 +173,9 @@ short sdc_read(long lba, unsigned char * buffer, short size) {
|
||||||
g_sdc_error = *SDC_TRANS_ERROR_REG; // Check for errors
|
g_sdc_error = *SDC_TRANS_ERROR_REG; // Check for errors
|
||||||
|
|
||||||
if (g_sdc_error != 0) {
|
if (g_sdc_error != 0) {
|
||||||
sdc_set_led(0); // Turn off the SDC LED
|
/* Turn off the SDC LED */
|
||||||
|
ind_set(IND_SDC, IND_OFF);
|
||||||
|
|
||||||
return DEV_CANNOT_READ;
|
return DEV_CANNOT_READ;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
@ -174,6 +185,9 @@ short sdc_read(long lba, unsigned char * buffer, short size) {
|
||||||
// Get the number of bytes to be read and make sure there is room
|
// Get the number of bytes to be read and make sure there is room
|
||||||
count = *SDC_RX_FIFO_DATA_CNT_HI << 8 | *SDC_RX_FIFO_DATA_CNT_LO;
|
count = *SDC_RX_FIFO_DATA_CNT_HI << 8 | *SDC_RX_FIFO_DATA_CNT_LO;
|
||||||
if (count > size) {
|
if (count > size) {
|
||||||
|
/* Turn off the SDC LED */
|
||||||
|
ind_set(IND_SDC, IND_OFF);
|
||||||
|
|
||||||
return DEV_BOUNDS_ERR;
|
return DEV_BOUNDS_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -185,14 +199,22 @@ short sdc_read(long lba, unsigned char * buffer, short size) {
|
||||||
|
|
||||||
g_sdc_error = *SDC_TRANS_ERROR_REG; // Check for errors
|
g_sdc_error = *SDC_TRANS_ERROR_REG; // Check for errors
|
||||||
if (g_sdc_error != 0) {
|
if (g_sdc_error != 0) {
|
||||||
|
/* Turn off the SDC LED */
|
||||||
|
ind_set(IND_SDC, IND_OFF);
|
||||||
|
|
||||||
return DEV_CANNOT_READ;
|
return DEV_CANNOT_READ;
|
||||||
} else {
|
} else {
|
||||||
|
/* Turn off the SDC LED */
|
||||||
|
ind_set(IND_SDC, IND_OFF);
|
||||||
|
|
||||||
// Success: return the byte count
|
// Success: return the byte count
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
sdc_set_led(0); // Turn off the SDC LED
|
/* Turn off the SDC LED */
|
||||||
|
ind_set(IND_SDC, IND_OFF);
|
||||||
|
|
||||||
return DEV_TIMEOUT;
|
return DEV_TIMEOUT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -222,7 +244,8 @@ short sdc_write(long lba, const unsigned char * buffer, short size) {
|
||||||
return DEV_NOMEDIA;
|
return DEV_NOMEDIA;
|
||||||
}
|
}
|
||||||
|
|
||||||
sdc_set_led(1); // Turn on the SDC LED
|
/* Turn on the SDC LED */
|
||||||
|
ind_set(IND_SDC, IND_ON);
|
||||||
|
|
||||||
if (size <= SDC_SECTOR_SIZE) {
|
if (size <= SDC_SECTOR_SIZE) {
|
||||||
// Copy the data to the SDC, if there isn't too much...
|
// Copy the data to the SDC, if there isn't too much...
|
||||||
|
@ -238,6 +261,9 @@ short sdc_write(long lba, const unsigned char * buffer, short size) {
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
/* Turn off the SDC LED */
|
||||||
|
ind_set(IND_SDC, IND_OFF);
|
||||||
|
|
||||||
// If size is too big, return a BOUNDS error
|
// If size is too big, return a BOUNDS error
|
||||||
return DEV_BOUNDS_ERR;
|
return DEV_BOUNDS_ERR;
|
||||||
}
|
}
|
||||||
|
@ -259,15 +285,22 @@ short sdc_write(long lba, const unsigned char * buffer, short size) {
|
||||||
g_sdc_error = *SDC_TRANS_ERROR_REG; // Check for errors
|
g_sdc_error = *SDC_TRANS_ERROR_REG; // Check for errors
|
||||||
|
|
||||||
if (g_sdc_error != 0) {
|
if (g_sdc_error != 0) {
|
||||||
sdc_set_led(0); // Turn off the SDC LED
|
/* Turn off the SDC LED */
|
||||||
|
ind_set(IND_SDC, IND_OFF);
|
||||||
|
|
||||||
return DEV_CANNOT_WRITE;
|
return DEV_CANNOT_WRITE;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
/* Turn off the SDC LED */
|
||||||
|
ind_set(IND_SDC, IND_OFF);
|
||||||
|
|
||||||
// Success: return the byte count
|
// Success: return the byte count
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
sdc_set_led(0); // Turn off the SDC LED
|
/* Turn off the SDC LED */
|
||||||
|
ind_set(IND_SDC, IND_OFF);
|
||||||
|
|
||||||
return DEV_TIMEOUT;
|
return DEV_TIMEOUT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,8 @@
|
||||||
#include "constants.h"
|
#include "constants.h"
|
||||||
#include "vicky_general.h"
|
#include "vicky_general.h"
|
||||||
#include "text_screen_iii.h"
|
#include "text_screen_iii.h"
|
||||||
#include "rsrc/font/foenix_st_8_8.h"
|
#include "simpleio.h"
|
||||||
|
#include "rsrc/font/MSX_CP437_8x8.h"
|
||||||
|
|
||||||
#define MAX_TEXT_CHANNELS 2
|
#define MAX_TEXT_CHANNELS 2
|
||||||
|
|
||||||
|
@ -13,12 +14,14 @@
|
||||||
* Structure to hold pointers to the text channel's registers and memory
|
* Structure to hold pointers to the text channel's registers and memory
|
||||||
*/
|
*/
|
||||||
typedef struct s_text_channel {
|
typedef struct s_text_channel {
|
||||||
volatile uint32_t * master_control;
|
unsigned char current_color;
|
||||||
|
|
||||||
|
volatile unsigned long * master_control;
|
||||||
volatile char * text_cells;
|
volatile char * text_cells;
|
||||||
volatile uint8_t * color_cells;
|
volatile char * color_cells;
|
||||||
volatile uint32_t * cursor_settings;
|
volatile unsigned long * cursor_settings;
|
||||||
volatile uint32_t * cursor_position;
|
volatile unsigned long * cursor_position;
|
||||||
volatile uint32_t * border_control;
|
volatile unsigned long * border_control;
|
||||||
|
|
||||||
short columns_max;
|
short columns_max;
|
||||||
short rows_max;
|
short rows_max;
|
||||||
|
@ -28,13 +31,11 @@ typedef struct s_text_channel {
|
||||||
short x;
|
short x;
|
||||||
short y;
|
short y;
|
||||||
volatile char * text_cursor_ptr;
|
volatile char * text_cursor_ptr;
|
||||||
volatile uint8_t * color_cursor_ptr;
|
volatile unsigned char * color_cursor_ptr;
|
||||||
uint8_t current_color;
|
|
||||||
} t_text_channel, *p_text_channel;
|
} t_text_channel, *p_text_channel;
|
||||||
|
|
||||||
static t_text_channel text_channel[MAX_TEXT_CHANNELS];
|
static t_text_channel text_channel[MAX_TEXT_CHANNELS];
|
||||||
|
|
||||||
|
|
||||||
// 0xHHLL, 0xHHLL
|
// 0xHHLL, 0xHHLL
|
||||||
// 0xGGBB, 0xAARR
|
// 0xGGBB, 0xAARR
|
||||||
const unsigned short fg_color_lut [32] = {
|
const unsigned short fg_color_lut [32] = {
|
||||||
|
@ -79,19 +80,45 @@ const unsigned short bg_color_lut [32] = {
|
||||||
* Initialize the text screen driver
|
* Initialize the text screen driver
|
||||||
*/
|
*/
|
||||||
int text_init() {
|
int text_init() {
|
||||||
|
short need_hires = 0;
|
||||||
int i, x;
|
int i, x;
|
||||||
p_text_channel chan_a = &text_channel[0];
|
p_text_channel chan_a = &text_channel[0];
|
||||||
|
|
||||||
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
p_text_channel chan_b = &text_channel[1];
|
p_text_channel chan_b = &text_channel[1];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
for (i = 0; i < MAX_TEXT_CHANNELS; i++) {
|
||||||
|
text_channel[i].master_control = 0xffffffff;
|
||||||
|
text_channel[i].text_cells = 0xffffffff;
|
||||||
|
text_channel[i].color_cells = 0xffffffff;
|
||||||
|
text_channel[i].cursor_settings = 0xffffffff;
|
||||||
|
text_channel[i].cursor_position = 0xffffffff;
|
||||||
|
text_channel[i].border_control = 0xffffffff;
|
||||||
|
text_channel[i].text_cursor_ptr = 0xffffffff;
|
||||||
|
text_channel[i].color_cursor_ptr = 0xffffffff;
|
||||||
|
text_channel[i].current_color = 0;
|
||||||
|
text_channel[i].columns_max = 0;
|
||||||
|
text_channel[i].rows_max = 0;
|
||||||
|
text_channel[i].columns_visible = 0;
|
||||||
|
text_channel[i].rows_visible = 0;
|
||||||
|
text_channel[i].x = 0;
|
||||||
|
text_channel[i].y = 0;
|
||||||
|
}
|
||||||
|
|
||||||
// Init CLUT for the Color Memory
|
// Init CLUT for the Color Memory
|
||||||
for (i = 0; i<32; i++) {
|
for (i = 0; i<32; i++) {
|
||||||
FG_CLUT_A[i] = fg_color_lut[i];
|
FG_CLUT_A[i] = fg_color_lut[i];
|
||||||
FG_CLUT_B[i] = fg_color_lut[i];
|
|
||||||
BG_CLUT_A[i] = bg_color_lut[i];
|
BG_CLUT_A[i] = bg_color_lut[i];
|
||||||
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
|
FG_CLUT_B[i] = fg_color_lut[i];
|
||||||
BG_CLUT_B[i] = bg_color_lut[i];
|
BG_CLUT_B[i] = bg_color_lut[i];
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO: initialize everything... only do a screen if it's present */
|
/* Initialize everything... only do a screen if it's present */
|
||||||
|
|
||||||
|
need_hires = ((*VKY3_DIP_REG & VKY3_DIP_HIRES) == 0) ? 1 : 0;
|
||||||
|
|
||||||
chan_a->master_control = MasterControlReg_A;
|
chan_a->master_control = MasterControlReg_A;
|
||||||
chan_a->text_cells = ScreenText_A;
|
chan_a->text_cells = ScreenText_A;
|
||||||
|
@ -100,8 +127,11 @@ int text_init() {
|
||||||
chan_a->cursor_position = CursorControlReg_H_A;
|
chan_a->cursor_position = CursorControlReg_H_A;
|
||||||
chan_a->border_control = BorderControlReg_L_A;
|
chan_a->border_control = BorderControlReg_L_A;
|
||||||
|
|
||||||
*chan_a->master_control = 1; /* Set to text only mode: 640x480 */
|
if (need_hires) {
|
||||||
// *chan_a->border_control = 0; /* Set to no border */
|
*chan_a->master_control = VKY3_MCR_800x600 | VKY3_MCR_TEXT_EN; /* Set to text only mode: 800x600 */
|
||||||
|
} else {
|
||||||
|
*chan_a->master_control = VKY3_MCR_640x480 | VKY3_MCR_TEXT_EN; /* Set to text only mode: 640x480 */
|
||||||
|
}
|
||||||
|
|
||||||
chan_a->border_control[0] = 0x00102001; // Enable
|
chan_a->border_control[0] = 0x00102001; // Enable
|
||||||
chan_a->border_control[1] = 0x00000040; //Dark Blue
|
chan_a->border_control[1] = 0x00000040; //Dark Blue
|
||||||
|
@ -109,15 +139,18 @@ int text_init() {
|
||||||
/* Set the font for channel A */
|
/* Set the font for channel A */
|
||||||
|
|
||||||
for (i = 0; i < 0x800; i++) {
|
for (i = 0; i < 0x800; i++) {
|
||||||
unsigned char b = foenix_st_8x8[i];
|
unsigned char b = MSX_CP437_8x8_bin[i];
|
||||||
VICKY_TXT_FONT_A[i] = b;
|
VICKY_TXT_FONT_A[i] = b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
text_set_border(0, 1, 0x20, 0x10, 0x00008080);
|
||||||
text_setsizes(0);
|
text_setsizes(0);
|
||||||
text_set_color(0, 12, 4);
|
text_set_color(0, 0xf, 4);
|
||||||
text_clear(0, 2);
|
text_set_cursor(0, 0xF3, 0x7F, 1, 1);
|
||||||
text_set_cursor(0, 0xF3, 0xB1, 1, 1);
|
|
||||||
text_set_xy(0, 0, 0);
|
text_set_xy(0, 0, 0);
|
||||||
|
text_clear(0, 2);
|
||||||
|
|
||||||
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
|
|
||||||
chan_b->master_control = MasterControlReg_B;
|
chan_b->master_control = MasterControlReg_B;
|
||||||
chan_b->text_cells = ScreenText_B;
|
chan_b->text_cells = ScreenText_B;
|
||||||
|
@ -126,7 +159,11 @@ int text_init() {
|
||||||
chan_b->cursor_position = CursorControlReg_H_B;
|
chan_b->cursor_position = CursorControlReg_H_B;
|
||||||
chan_b->border_control = BorderControlReg_L_B;
|
chan_b->border_control = BorderControlReg_L_B;
|
||||||
|
|
||||||
*chan_b->master_control = 1; /* Set to text only mode: 640x480 */
|
if (need_hires) {
|
||||||
|
*chan_b->master_control = VKY3_MCR_800x600 | VKY3_MCR_TEXT_EN; /* Set to text only mode: 800x600 */
|
||||||
|
} else {
|
||||||
|
*chan_b->master_control = VKY3_MCR_640x480 | VKY3_MCR_TEXT_EN; /* Set to text only mode: 640x480 */
|
||||||
|
}
|
||||||
|
|
||||||
chan_b->border_control[0] = 0x00102000; // Enable
|
chan_b->border_control[0] = 0x00102000; // Enable
|
||||||
chan_b->border_control[1] = 0x00400000; //Dark Red
|
chan_b->border_control[1] = 0x00400000; //Dark Red
|
||||||
|
@ -134,19 +171,48 @@ int text_init() {
|
||||||
text_setsizes(1);
|
text_setsizes(1);
|
||||||
text_set_color(1, 4, 3);
|
text_set_color(1, 4, 3);
|
||||||
text_clear(1, 2);
|
text_clear(1, 2);
|
||||||
text_set_cursor(1, 0xF3, 0xB1, 1, 1);
|
text_set_cursor(1, 0xF3, 0x7F, 1, 1);
|
||||||
text_set_xy(1, 0, 0);
|
text_set_xy(1, 0, 0);
|
||||||
|
|
||||||
/* Set the font for channel B */
|
/* Set the font for channel B */
|
||||||
|
|
||||||
for (i = 0; i < 0x800; i++) {
|
for (i = 0; i < 0x800; i++) {
|
||||||
unsigned char b = foenix_st_8x8[i];
|
unsigned char b = MSX_CP437_8x8_bin[i];
|
||||||
VICKY_TXT_FONT_B[i] = b;
|
VICKY_TXT_FONT_B[i] = b;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set the border
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* screen = the screen number 0 for channel A, 1 for channel B
|
||||||
|
* visible = 0 to hide, any other number to show
|
||||||
|
* width = the horizontal thickness of the border in pixels
|
||||||
|
* height = the vertical thickness of the border in pixels
|
||||||
|
* color = the RGB color (xxRRGGBB)
|
||||||
|
*/
|
||||||
|
void text_set_border(short screen, short visible, short width, short height, unsigned long color) {
|
||||||
|
if (screen < MAX_TEXT_CHANNELS) {
|
||||||
|
p_text_channel chan = &text_channel[screen];
|
||||||
|
|
||||||
|
if (visible) {
|
||||||
|
/* Set the width and color */
|
||||||
|
chan->border_control[0] = ((height & 0xff) << 16) | ((width & 0xff) << 8) | 1;
|
||||||
|
chan->border_control[1] = (color & 0x00ff0000) | ((color & 0xff) << 8) | ((color & 0xff00) >> 8);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
/* Hide the border and make it 0 width */
|
||||||
|
chan->border_control[0] = 0;
|
||||||
|
chan->border_control[1] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set the cursor properties
|
* Set the cursor properties
|
||||||
*
|
*
|
||||||
|
@ -192,7 +258,8 @@ void text_set_xy(short screen, unsigned short x, unsigned short y) {
|
||||||
|
|
||||||
chan->x = x;
|
chan->x = x;
|
||||||
chan->y = y;
|
chan->y = y;
|
||||||
*(chan->cursor_position) = y << 16 | x;
|
|
||||||
|
*(chan->cursor_position) = ((unsigned long)y << 16) | (unsigned long)x;
|
||||||
short offset = y * chan->columns_max + x;
|
short offset = y * chan->columns_max + x;
|
||||||
chan->text_cursor_ptr = &chan->text_cells[offset];
|
chan->text_cursor_ptr = &chan->text_cells[offset];
|
||||||
chan->color_cursor_ptr = &chan->color_cells[offset];
|
chan->color_cursor_ptr = &chan->color_cells[offset];
|
||||||
|
@ -335,34 +402,35 @@ void text_clear(short screen, short mode) {
|
||||||
int eos_index = chan->columns_max * chan->rows_max;
|
int eos_index = chan->columns_max * chan->rows_max;
|
||||||
int cursor_index = chan->y * chan->columns_max + chan->x;
|
int cursor_index = chan->y * chan->columns_max + chan->x;
|
||||||
|
|
||||||
switch (mode) {
|
// switch (mode) {
|
||||||
case 0:
|
// case 0:
|
||||||
/* Clear from cursor to the end of the screen */
|
// /* Clear from cursor to the end of the screen */
|
||||||
for (i = cursor_index; i < eos_index; i++) {
|
// for (i = cursor_index; i < eos_index; i++) {
|
||||||
chan->text_cells[i] = ' ';
|
// chan->text_cells[i] = ' ';
|
||||||
chan->color_cells[i] = chan->current_color;
|
// chan->color_cells[i] = chan->current_color;
|
||||||
}
|
// }
|
||||||
break;
|
// break;
|
||||||
|
//
|
||||||
case 1:
|
// case 1:
|
||||||
/* Clear from (0, 0) to cursor */
|
// /* Clear from (0, 0) to cursor */
|
||||||
for (i = sos_index; i <= cursor_index; i++) {
|
// for (i = sos_index; i <= cursor_index; i++) {
|
||||||
chan->text_cells[i] = ' ';
|
// chan->text_cells[i] = ' ';
|
||||||
chan->color_cells[i] = chan->current_color;
|
// chan->color_cells[i] = chan->current_color;
|
||||||
}
|
// }
|
||||||
break;
|
// break;
|
||||||
|
//
|
||||||
case 2:
|
// case 2:
|
||||||
/* Clear entire screen */
|
/* Clear entire screen */
|
||||||
for (i = sos_index; i <= eos_index; i++) {
|
for (i = 0; i < 0x2000; i++) {
|
||||||
chan->text_cells[i] = ' ';
|
chan->text_cells[i] = ' ';
|
||||||
chan->color_cells[i] = chan->current_color;
|
chan->color_cells[i] = chan->current_color;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
// break;
|
||||||
break;
|
//
|
||||||
}
|
// default:
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,18 @@ extern int text_init();
|
||||||
*/
|
*/
|
||||||
extern void text_set_cursor(short screen, short color, char character, short rate, short enable);
|
extern void text_set_cursor(short screen, short color, char character, short rate, short enable);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set the border
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* screen = the screen number 0 for channel A, 1 for channel B
|
||||||
|
* visible = 0 to hide, any other number to show
|
||||||
|
* width = the horizontal thickness of the border in pixels
|
||||||
|
* height = the vertical thickness of the border in pixels
|
||||||
|
* color = the RGB color (xxRRGGBB)
|
||||||
|
*/
|
||||||
|
extern void text_set_border(short screen, short visible, short width, short height, unsigned long color);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set the position of the cursor on the screen. Adjusts internal pointers used for printing the characters
|
* Set the position of the cursor on the screen. Adjusts internal pointers used for printing the characters
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,66 +0,0 @@
|
||||||
/*
|
|
||||||
* Definitions for the MIDI ports
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "midi_reg.h"
|
|
||||||
#include "dev/midi.h"
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Initilialize the MIDI port
|
|
||||||
*/
|
|
||||||
short midi_init() {
|
|
||||||
*MIDI_CMD = 0xff; /* Send the command to reset the MIDI port */
|
|
||||||
|
|
||||||
// while ((*MIDI_STAT & MIDI_STAT_RX_EMPTY) == 0) {
|
|
||||||
// /* While there is data, throw it out */
|
|
||||||
// unsigned char dummy = *MIDI_DATA;
|
|
||||||
// }
|
|
||||||
|
|
||||||
*MIDI_CMD = 0x3F; /* Switch the MIDI port into UART mode */
|
|
||||||
|
|
||||||
// while ((*MIDI_STAT & MIDI_STAT_RX_EMPTY) == 0) {
|
|
||||||
// /* While there is data, throw it out */
|
|
||||||
// unsigned char dummy = *MIDI_DATA;
|
|
||||||
// }
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Send a byte to the MIDI port
|
|
||||||
*
|
|
||||||
* Inputs:
|
|
||||||
* b = the byte to send
|
|
||||||
*/
|
|
||||||
short midi_put(unsigned char b) {
|
|
||||||
while ((*MIDI_STAT & MIDI_STAT_TX_BUSY) != 0) {
|
|
||||||
/* Wait until the MIDI transmitter is not busy */
|
|
||||||
;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Send the byte */
|
|
||||||
*MIDI_DATA = b;
|
|
||||||
|
|
||||||
while ((*MIDI_STAT & MIDI_STAT_TX_BUSY) != 0) {
|
|
||||||
/* Wait until the MIDI transmitter is not busy */
|
|
||||||
;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Get a byte from the MIDI port
|
|
||||||
*
|
|
||||||
* Returns:
|
|
||||||
* b = the byte to send
|
|
||||||
*/
|
|
||||||
short midi_get_poll() {
|
|
||||||
if (*MIDI_STAT & MIDI_STAT_RX_EMPTY) {
|
|
||||||
/* There's no data... return 0 */
|
|
||||||
return 0;
|
|
||||||
} else {
|
|
||||||
/* Get and return the byte */
|
|
||||||
return (short)*MIDI_DATA;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,5 +1,3 @@
|
||||||
override CFLAGS = +../../vbcc/config/m68k-foenix -I. -I.. -I../include
|
|
||||||
|
|
||||||
csources = $(wildcard *.c)
|
csources = $(wildcard *.c)
|
||||||
cobjects = $(subst .c,.o,$(csources))
|
cobjects = $(subst .c,.o,$(csources))
|
||||||
|
|
||||||
|
|
22771
src/fatfs/ff.lst
22771
src/fatfs/ff.lst
File diff suppressed because it is too large
Load diff
|
@ -25,7 +25,7 @@
|
||||||
/ 3: f_lseek() function is removed in addition to 2. */
|
/ 3: f_lseek() function is removed in addition to 2. */
|
||||||
|
|
||||||
|
|
||||||
#define FF_USE_FIND 0
|
#define FF_USE_FIND 2
|
||||||
/* This option switches filtered directory read functions, f_findfirst() and
|
/* This option switches filtered directory read functions, f_findfirst() and
|
||||||
/ f_findnext(). (0:Disable, 1:Enable 2:Enable with matching altname[] too) */
|
/ f_findnext(). (0:Disable, 1:Enable 2:Enable with matching altname[] too) */
|
||||||
|
|
||||||
|
|
273
src/foenixmcp.c
273
src/foenixmcp.c
|
@ -2,21 +2,29 @@
|
||||||
* Startup file for the Foenix/MCP
|
* Startup file for the Foenix/MCP
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "sys_general.h"
|
#include "sys_general.h"
|
||||||
#include "simpleio.h"
|
#include "simpleio.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
|
#include "indicators.h"
|
||||||
#include "interrupt.h"
|
#include "interrupt.h"
|
||||||
#include "gabe_reg.h"
|
#include "gabe_reg.h"
|
||||||
|
|
||||||
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
#include "superio.h"
|
#include "superio.h"
|
||||||
|
#include "dev/kbd_mo.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "syscalls.h"
|
#include "syscalls.h"
|
||||||
|
#include "timers.h"
|
||||||
#include "dev/block.h"
|
#include "dev/block.h"
|
||||||
#include "dev/channel.h"
|
#include "dev/channel.h"
|
||||||
#include "dev/console.h"
|
#include "dev/console.h"
|
||||||
|
#include "dev/fdc.h"
|
||||||
#include "dev/text_screen_iii.h"
|
#include "dev/text_screen_iii.h"
|
||||||
#include "dev/pata.h"
|
#include "dev/pata.h"
|
||||||
#include "dev/ps2.h"
|
#include "dev/ps2.h"
|
||||||
#include "dev/kbd_mo.h"
|
|
||||||
#include "dev/rtc.h"
|
#include "dev/rtc.h"
|
||||||
#include "dev/sdc.h"
|
#include "dev/sdc.h"
|
||||||
#include "dev/uart.h"
|
#include "dev/uart.h"
|
||||||
|
@ -26,10 +34,12 @@
|
||||||
#include "snd/sid.h"
|
#include "snd/sid.h"
|
||||||
#include "fatfs/ff.h"
|
#include "fatfs/ff.h"
|
||||||
#include "cli/cli.h"
|
#include "cli/cli.h"
|
||||||
/* #include "rsrc/bitmaps/splash_a2560k.h"*/
|
// #include "rsrc/bitmaps/splash_a2560k.h"
|
||||||
|
#include "rsrc/bitmaps/splash_a2560u.h"
|
||||||
|
|
||||||
const char* VolumeStr[FF_VOLUMES] = { "sdc", "fdc", "hdc" };
|
const char* VolumeStr[FF_VOLUMES] = { "sd", "fd", "hd" };
|
||||||
|
|
||||||
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
/*
|
/*
|
||||||
* Initialize the SuperIO registers
|
* Initialize the SuperIO registers
|
||||||
*/
|
*/
|
||||||
|
@ -46,7 +56,7 @@ const char* VolumeStr[FF_VOLUMES] = { "sdc", "fdc", "hdc" };
|
||||||
*GP20_REG = 0x00;
|
*GP20_REG = 0x00;
|
||||||
*GP24_REG = 0x01;
|
*GP24_REG = 0x01;
|
||||||
*GP25_REG = 0x05;
|
*GP25_REG = 0x05;
|
||||||
*GP24_REG = 0x84;
|
*GP26_REG = 0x84;
|
||||||
|
|
||||||
*GP30_REG = 0x01;
|
*GP30_REG = 0x01;
|
||||||
*GP31_REG = 0x01;
|
*GP31_REG = 0x01;
|
||||||
|
@ -82,76 +92,88 @@ const char* VolumeStr[FF_VOLUMES] = { "sdc", "fdc", "hdc" };
|
||||||
*LED1_REG = 0x01;
|
*LED1_REG = 0x01;
|
||||||
*LED2_REG = 0x02;
|
*LED2_REG = 0x02;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// /*
|
/*
|
||||||
// * Load and display the splash screen
|
* Load and display the splash screen
|
||||||
// */
|
*/
|
||||||
// void load_splashscreen() {
|
void load_splashscreen() {
|
||||||
// int i;
|
long target_ticks;
|
||||||
//
|
int i;
|
||||||
// /* Turn off the screen */
|
unsigned char * pixels;
|
||||||
// *MasterControlReg_A = VKY3_MCR_BLANK_EN;
|
unsigned char * vram = VRAM_Bank0;
|
||||||
//
|
|
||||||
// /* Copy the splash screen LUT */
|
|
||||||
// for (i = 0; i < sizeof(splash_screen_cmap); i++) {
|
|
||||||
// LUT_0[i] = splash_screen_cmap[i][0];
|
|
||||||
// LUT_0[i+1] = splash_screen_cmap[i][1];
|
|
||||||
// LUT_0[i+2] = splash_screen_cmap[i][2];
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// /* Copy the bitmap to video RAM */
|
|
||||||
// for (i = 0; i < sizeof(splash_screen_bmap); i++) {
|
|
||||||
// VRAM_Bank0[i] = splash_screen_bmap[i];
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// /* Set up the bitmap */
|
|
||||||
// *BM0_Addy_Pointer_Reg = 0;
|
|
||||||
// *BM0_Control_Reg = 1;
|
|
||||||
//
|
|
||||||
// /* Turn off the border */
|
|
||||||
// *BorderControlReg_L_A = 0;
|
|
||||||
//
|
|
||||||
// /* Display the splashscreen: 320x200 */
|
|
||||||
// *MasterControlReg_A = VKY3_MCR_BITMAP_EN | VKY3_MCR_GRAPH_EN | VKY3_MCR_DOUBLE_EN;
|
|
||||||
//
|
|
||||||
// for (i = 0; i < 4096*1024; i++) ;
|
|
||||||
// }
|
|
||||||
|
|
||||||
void print_error(short channel, char * message, short code) {
|
/* Turn off the screen */
|
||||||
print(channel, message);
|
*MasterControlReg_A = VKY3_MCR_BLANK_EN;
|
||||||
print(channel, ": ");
|
|
||||||
print_hex_16(channel, code);
|
for (i = 0; i < 256; i++) {
|
||||||
print(channel, "\n");
|
LUT_0[4*i] = splashscreen_lut[4*i];
|
||||||
}
|
LUT_0[4*i+1] = splashscreen_lut[4*i+1];
|
||||||
|
LUT_0[4*i+2] = splashscreen_lut[4*i+2];
|
||||||
|
LUT_0[4*i+3] = splashscreen_lut[4*i+3];
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Copy the bitmap to video RAM */
|
||||||
|
for (pixels = splashscreen_pix; *pixels != 0;) {
|
||||||
|
unsigned char count = *pixels++;
|
||||||
|
unsigned char pixel = *pixels++;
|
||||||
|
for (i = 0; i < count; i++) {
|
||||||
|
*vram++ = pixel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set up the bitmap */
|
||||||
|
*BM0_Addy_Pointer_Reg = 0;
|
||||||
|
*BM0_Control_Reg = 1;
|
||||||
|
|
||||||
|
/* Turn off the border */
|
||||||
|
*BorderControlReg_L_A = 0;
|
||||||
|
|
||||||
|
/* Set a background color for the bitmap mode */
|
||||||
|
*BackGroundControlReg_A = 0x00800000;
|
||||||
|
|
||||||
|
/* Display the splashscreen: 640x480 */
|
||||||
|
*MasterControlReg_A = VKY3_MCR_GRAPH_EN | VKY3_MCR_BITMAP_EN;
|
||||||
|
|
||||||
|
/* Play the SID test bong on the Gideon SID implementation */
|
||||||
|
sid_test_internal();
|
||||||
|
}
|
||||||
|
|
||||||
|
void print_error(short channel, char * message, short code) {
|
||||||
|
print(channel, message);
|
||||||
|
print(channel, ": ");
|
||||||
|
print_hex_16(channel, code);
|
||||||
|
print(channel, "\n");
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialize the kernel systems.
|
* Initialize the kernel systems.
|
||||||
*/
|
*/
|
||||||
void initialize() {
|
void initialize() {
|
||||||
|
long target_jiffies;
|
||||||
int i;
|
int i;
|
||||||
short res;
|
short res;
|
||||||
|
|
||||||
/* Set the logging level */
|
/* Set the logging level */
|
||||||
log_setlevel(LOG_ERROR);
|
log_setlevel(LOG_ERROR);
|
||||||
|
|
||||||
/* Hide the mouse */
|
// /* Hide the mouse */
|
||||||
mouse_set_visible(0);
|
mouse_set_visible(0);
|
||||||
|
|
||||||
/* Display the splash screen */
|
|
||||||
/* load_splashscreen(); */
|
|
||||||
|
|
||||||
/* Initialize the text channels */
|
/* Initialize the text channels */
|
||||||
text_init();
|
text_init();
|
||||||
|
|
||||||
|
/* Initialize the indicators, and turn on the power indicator */
|
||||||
|
ind_init();
|
||||||
|
ind_set(IND_POWER, IND_ON);
|
||||||
|
|
||||||
/* Initialize the interrupt system */
|
/* Initialize the interrupt system */
|
||||||
int_init();
|
int_init();
|
||||||
|
|
||||||
/* Set the power LED to purple */
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
*RGB_LED_L = 0x00FF;
|
|
||||||
*RGB_LED_H = 0x00FF;
|
|
||||||
|
|
||||||
/* Initialize the SuperIO chip */
|
/* Initialize the SuperIO chip */
|
||||||
init_superio();
|
init_superio();
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Mute the PSG */
|
/* Mute the PSG */
|
||||||
psg_mute_all();
|
psg_mute_all();
|
||||||
|
@ -162,9 +184,6 @@ void initialize() {
|
||||||
/* Initialize the SID chips */
|
/* Initialize the SID chips */
|
||||||
sid_init_all();
|
sid_init_all();
|
||||||
|
|
||||||
/* Play the SID test bong on the Gideon SID implementation */
|
|
||||||
sid_test_internal();
|
|
||||||
|
|
||||||
cdev_init_system(); // Initialize the channel device system
|
cdev_init_system(); // Initialize the channel device system
|
||||||
log(LOG_INFO, "Channel device system ready.");
|
log(LOG_INFO, "Channel device system ready.");
|
||||||
|
|
||||||
|
@ -177,9 +196,20 @@ void initialize() {
|
||||||
log(LOG_INFO, "Console installed.");
|
log(LOG_INFO, "Console installed.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Initialize the timers the MCP uses */
|
||||||
|
timers_init();
|
||||||
|
|
||||||
/* Initialize the real time clock */
|
/* Initialize the real time clock */
|
||||||
rtc_init();
|
rtc_init();
|
||||||
|
|
||||||
|
target_jiffies = sys_time_jiffies() + 300; /* 5 seconds minimum */
|
||||||
|
|
||||||
|
/* Enable all interrupts */
|
||||||
|
int_enable_all();
|
||||||
|
|
||||||
|
/* Display the splash screen */
|
||||||
|
load_splashscreen();
|
||||||
|
|
||||||
if (res = pata_install()) {
|
if (res = pata_install()) {
|
||||||
log_num(LOG_ERROR, "FAILED: PATA driver installation", res);
|
log_num(LOG_ERROR, "FAILED: PATA driver installation", res);
|
||||||
} else {
|
} else {
|
||||||
|
@ -200,11 +230,13 @@ void initialize() {
|
||||||
DEBUG("PS/2 keyboard initialized.");
|
DEBUG("PS/2 keyboard initialized.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
if (res = kbdmo_init()) {
|
if (res = kbdmo_init()) {
|
||||||
log_num(LOG_ERROR, "FAILED: A2560K built-in keyboard initialization", res);
|
log_num(LOG_ERROR, "FAILED: A2560K built-in keyboard initialization", res);
|
||||||
} else {
|
} else {
|
||||||
log(LOG_INFO, "A2560K built-in keyboard initialized.");
|
log(LOG_INFO, "A2560K built-in keyboard initialized.");
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (res = cli_init()) {
|
if (res = cli_init()) {
|
||||||
log_num(LOG_ERROR, "FAILED: CLI initialization", res);
|
log_num(LOG_ERROR, "FAILED: CLI initialization", res);
|
||||||
|
@ -218,125 +250,16 @@ void initialize() {
|
||||||
log(LOG_INFO, "File system initialized.");
|
log(LOG_INFO, "File system initialized.");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Enable all interrupts */
|
/* Wait until the target duration has been reached _or_ the user presses a key */
|
||||||
int_enable_all();
|
while (target_jiffies > sys_time_jiffies()) {
|
||||||
}
|
short scan_code = sys_kbd_scancode();
|
||||||
|
if (scan_code != 0) {
|
||||||
void uart_send(short uart, char * message) {
|
break;
|
||||||
int i, j;
|
|
||||||
|
|
||||||
for (i = 0; i < strlen(message); i++) {
|
|
||||||
uart_put(uart, message[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void uart_test_send(short uart) {
|
|
||||||
while (1) {
|
|
||||||
int j;
|
|
||||||
uart_put(uart, 'a');
|
|
||||||
for (j = 1; j < 10000; j++) ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void try_format(short screen, char * path) {
|
|
||||||
FATFS fs; /* Filesystem object */
|
|
||||||
FIL fil; /* File object */
|
|
||||||
FRESULT res; /* API result code */
|
|
||||||
UINT bw; /* Bytes written */
|
|
||||||
BYTE work[FF_MAX_SS]; /* Work area (larger is better for processing time) */
|
|
||||||
|
|
||||||
/* Format the HDD with default parameters */
|
|
||||||
res = f_mkfs(path, 0, work, sizeof work);
|
|
||||||
if (res) {
|
|
||||||
print(screen, "Could not format drive.\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Give a work area to the default drive */
|
|
||||||
f_mount(&fs, path, 0);
|
|
||||||
|
|
||||||
/* Create a file as new */
|
|
||||||
res = f_open(&fil, "hello.txt", FA_CREATE_NEW | FA_WRITE);
|
|
||||||
if (res) {
|
|
||||||
print(screen, "Could not create hello.txt.\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Write a message */
|
|
||||||
f_write(&fil, "Hello, World!\r\n", 15, &bw);
|
|
||||||
if (bw != 15) {
|
|
||||||
print(screen, "Error writing file.\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Close the file */
|
|
||||||
f_close(&fil);
|
|
||||||
|
|
||||||
/* Unregister work area */
|
|
||||||
f_mount(0, "", 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void try_write(short screen, char * path) {
|
|
||||||
FATFS fs; /* Filesystem object */
|
|
||||||
FIL fil; /* File object */
|
|
||||||
FRESULT res; /* API result code */
|
|
||||||
UINT bw; /* Bytes written */
|
|
||||||
|
|
||||||
/* Give a work area to the default drive */
|
|
||||||
f_mount(&fs, path, 0);
|
|
||||||
|
|
||||||
/* Create a file as new */
|
|
||||||
res = f_open(&fil, "hello.txt", FA_CREATE_NEW | FA_WRITE);
|
|
||||||
if (res) {
|
|
||||||
print(screen, "Could not create hello.txt: ");
|
|
||||||
print_hex_16(screen, res);
|
|
||||||
print(screen, "\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Write a message */
|
|
||||||
f_write(&fil, "Hello, World!\r\n", 15, &bw);
|
|
||||||
if (bw != 15) {
|
|
||||||
print(screen, "Error writing file.\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Close the file */
|
|
||||||
f_close(&fil);
|
|
||||||
|
|
||||||
/* Unregister work area */
|
|
||||||
f_mount(0, "", 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned char test_block_1[512];
|
|
||||||
unsigned char test_block_2[512];
|
|
||||||
|
|
||||||
void try_bdev_getput(short screen, short dev) {
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < 512; i++) {
|
|
||||||
test_block_1[i] = (unsigned short)i & 0xff;
|
|
||||||
}
|
|
||||||
|
|
||||||
short n = bdev_write(dev, 0x010000, test_block_1, 512);
|
|
||||||
if (n != 512) {
|
|
||||||
print(screen, "Could not write block.\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
n = bdev_read(dev, 0x010000, test_block_2, 512);
|
|
||||||
if (n != 512) {
|
|
||||||
print(screen, "Could not read block.\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < 512; i++) {
|
|
||||||
if (test_block_1[i] != test_block_2[i]) {
|
|
||||||
print(screen, "Block did not verify.\n");
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
print(screen, "BDEV read/write success.\n");
|
/* Go back to text mode */
|
||||||
|
text_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char * argv[]) {
|
int main(int argc, char * argv[]) {
|
||||||
|
@ -348,7 +271,7 @@ int main(int argc, char * argv[]) {
|
||||||
const char * title_3 = "\x1b[37m AAAAA 222 555 6666 0 0 U U";
|
const char * title_3 = "\x1b[37m AAAAA 222 555 6666 0 0 U U";
|
||||||
const char * title_4 = "\x1b[37m A A 2 5 6 6 0 0 U U";
|
const char * title_4 = "\x1b[37m A A 2 5 6 6 0 0 U U";
|
||||||
const char * title_5 = "\x1b[37m A A 22222 5555 666 000 UUU";
|
const char * title_5 = "\x1b[37m A A 22222 5555 666 000 UUU";
|
||||||
#elif MODEL == MODEL_FOENIX_A2560U
|
#elif MODEL == MODEL_FOENIX_A2560U_PLUS
|
||||||
const char * title_1 = "\x1b[37m A 2222 55555 666 000 U U +";
|
const char * title_1 = "\x1b[37m A 2222 55555 666 000 U U +";
|
||||||
const char * title_2 = "\x1b[37m A A 2 5 6 0 0 U U +";
|
const char * title_2 = "\x1b[37m A A 2 5 6 0 0 U U +";
|
||||||
const char * title_3 = "\x1b[37m AAAAA 222 555 6666 0 0 U U +++++";
|
const char * title_3 = "\x1b[37m AAAAA 222 555 6666 0 0 U U +++++";
|
||||||
|
@ -370,6 +293,7 @@ int main(int argc, char * argv[]) {
|
||||||
|
|
||||||
char welcome[255];
|
char welcome[255];
|
||||||
short result;
|
short result;
|
||||||
|
short i;
|
||||||
|
|
||||||
initialize();
|
initialize();
|
||||||
|
|
||||||
|
@ -379,6 +303,13 @@ int main(int argc, char * argv[]) {
|
||||||
sprintf(welcome, "Foenix/MCP v%02d.%02d-alpha+%04d\n\nType \"HELP\" or \"?\" for command summary.", VER_MAJOR, VER_MINOR, VER_BUILD);
|
sprintf(welcome, "Foenix/MCP v%02d.%02d-alpha+%04d\n\nType \"HELP\" or \"?\" for command summary.", VER_MAJOR, VER_MINOR, VER_BUILD);
|
||||||
sys_chan_write(0, welcome, strlen(welcome));
|
sys_chan_write(0, welcome, strlen(welcome));
|
||||||
|
|
||||||
|
// #if MODEL == MODEL_FOENIX_A2560K
|
||||||
|
// fdc_init();
|
||||||
|
// if (fdc_ioctrl(FDC_CTRL_MOTOR_ON, 0, 0)) {
|
||||||
|
// log(LOG_ERROR, "Could not turn on the floppy drive motor.");
|
||||||
|
// }
|
||||||
|
// #endif
|
||||||
|
|
||||||
cli_repl(0);
|
cli_repl(0);
|
||||||
|
|
||||||
log(LOG_INFO, "Stopping.");
|
log(LOG_INFO, "Stopping.");
|
||||||
|
|
2572
src/foenixmcp.s68
2572
src/foenixmcp.s68
File diff suppressed because it is too large
Load diff
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Registers and memory blocks for VICKY III
|
* Registers and memory blocks for VICKY III for the A2560K
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __VICKYIII_General_H
|
#ifndef __VICKYIII_General_H
|
||||||
|
@ -15,11 +15,23 @@
|
||||||
#define VKY3_MCR_GRAPH_EN 0x00000004 /* Graphic Mode Enable */
|
#define VKY3_MCR_GRAPH_EN 0x00000004 /* Graphic Mode Enable */
|
||||||
#define VKY3_MCR_BITMAP_EN 0x00000008 /* Bitmap Engine Enable */
|
#define VKY3_MCR_BITMAP_EN 0x00000008 /* Bitmap Engine Enable */
|
||||||
#define VKY3_MCR_RESOLUTION_MASK 0x00000300 /* Resolution - 00: 640x480, 01:800x600, 10: 1024x768, 11: 640x400 */
|
#define VKY3_MCR_RESOLUTION_MASK 0x00000300 /* Resolution - 00: 640x480, 01:800x600, 10: 1024x768, 11: 640x400 */
|
||||||
|
#define VKY3_MCR_640x480 0x00000000
|
||||||
|
#define VKY3_MCR_800x600 0x00000100
|
||||||
|
#define VKY3_MCR_1024x768 0x00000200
|
||||||
|
#define VKY3_MCR_640x400 0x00000300
|
||||||
#define VKY3_MCR_DOUBLE_EN 0x00000400 /* Doubling Pixel */
|
#define VKY3_MCR_DOUBLE_EN 0x00000400 /* Doubling Pixel */
|
||||||
#define VKY3_MCR_GAMMA_EN 0x00010000 /* GAMMA Enable */
|
#define VKY3_MCR_GAMMA_EN 0x00010000 /* GAMMA Enable */
|
||||||
#define VKY3_MCR_MANUAL_GAMMA_EN 0x00020000 /* Enable Manual GAMMA Enable */
|
#define VKY3_MCR_MANUAL_GAMMA_EN 0x00020000 /* Enable Manual GAMMA Enable */
|
||||||
#define VKY3_MCR_BLANK_EN 0x00040000 /* Turn OFF sync (to monitor in sleep mode) */
|
#define VKY3_MCR_BLANK_EN 0x00040000 /* Turn OFF sync (to monitor in sleep mode) */
|
||||||
|
|
||||||
|
|
||||||
|
/* Access to DIP switch information (read only) */
|
||||||
|
#define VKY3_DIP_REG ((volatile unsigned short *)0x00C40002)
|
||||||
|
/* Bits 0 - 12: Master Control Register data */
|
||||||
|
#define VKY3_DIP_GAMMA 0x2000 /* DIP switch indication for Gamma correction */
|
||||||
|
#define VKY3_DIP_HIRES 0x4000 /* DIP switch for high resolution mode */
|
||||||
|
#define VKY3_PLL_ACTIVE_CLK 0x8000 /* Active Clock --- 0: 25.175Mhz, 1: 40Mhz */
|
||||||
|
|
||||||
#define BorderControlReg_L_A ((volatile uint32_t *)0x00C40004)
|
#define BorderControlReg_L_A ((volatile uint32_t *)0x00C40004)
|
||||||
#define VKY3_BRDR_EN 0x00000001 /* Border Enable */
|
#define VKY3_BRDR_EN 0x00000001 /* Border Enable */
|
||||||
#define VKY3_X_SCROLL_MASK 0x00000070 /* X Scroll */
|
#define VKY3_X_SCROLL_MASK 0x00000070 /* X Scroll */
|
43
src/include/A2560K/fdc_a2560k.h
Normal file
43
src/include/A2560K/fdc_a2560k.h
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
/*
|
||||||
|
* Define the locations of all the FDC registers
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __FDC_A2560K_H
|
||||||
|
#define __FDC_A2560K_H
|
||||||
|
|
||||||
|
#define FDC_BASE ((volatile unsigned char *)0x00C023F0)
|
||||||
|
#define FDC_DOR ((volatile unsigned char *)0x00C023F2) /* Read/Write - Digital Output Register */
|
||||||
|
// FDC_DOR_DSEL0 = $01 ; Drive 0 Select
|
||||||
|
// FDC_DOR_DSEL1 = $02 ; Drive 1 Select
|
||||||
|
// FDC_DOR_NRESET = $04 ; Reset the FDC
|
||||||
|
// FDC_DOR_DMAEN = $08 ; Enable DMA
|
||||||
|
// FDC_DOR_MOT0 = $10 ; Turn on motor 0
|
||||||
|
// FDC_DOR_MOT1 = $20 ; Turn on motor 1
|
||||||
|
// FDC_DOR_MOT2 = $40 ; Turn on motor 2
|
||||||
|
// FDC_DOR_MOT3 = $80 ; Turn on motor 3
|
||||||
|
|
||||||
|
#define FDC_MSR ((volatile unsigned char *)0x00C023F4) /* Read - Main Status Register */
|
||||||
|
// FDC_MSR_DRV0BSY = $01 ; Indicates if drive 0 is busy
|
||||||
|
// FDC_MSR_DRV1BSY = $02 ; Indicates if drive 1 is busy
|
||||||
|
// FDC_MSR_CMDBSY = $10 ; Indicates if a command is in progress
|
||||||
|
// FDC_MSR_NONDMA = $20 ;
|
||||||
|
// FDC_MSR_DIO = $40 ; Data direction: 1 = read, 0 = write
|
||||||
|
// FDC_MSR_RQM = $80 ; 1 = host can transfer data, 0 = host must wait
|
||||||
|
|
||||||
|
#define FDC_DSR ((volatile unsigned char *)0x00C023F4) /* Write - Data Select Register */
|
||||||
|
// ; Bit[0..1] = data rate
|
||||||
|
// ; Bit[2..4] = precompensation select
|
||||||
|
// FDC_DSR_LOPWR = $40 ; Turn on low power mode
|
||||||
|
// FDC_DSR_RESET = $80 ; Software reset of the FDC
|
||||||
|
|
||||||
|
#define FDC_DATA ((volatile unsigned char *)0x00C023F5) /* Read/Write - Data - FIFO */
|
||||||
|
|
||||||
|
#define FDC_RSV ((volatile unsigned char *)0x00C023F6) /* Reserved */
|
||||||
|
|
||||||
|
#define FDC_DIR ((volatile unsigned char *)0x00C023F7) /* Read - Digital Input Register */
|
||||||
|
// FDC_DIR_DSKCHG = $80 ; Indicates if the disk has changed
|
||||||
|
|
||||||
|
#define FDC_CCR ((volatile unsigned char *)0x00C023F7) /* Write - Configuration Control Register */
|
||||||
|
// ; Bit[0..1] = Data rate
|
||||||
|
|
||||||
|
#endif
|
|
@ -7,121 +7,12 @@
|
||||||
|
|
||||||
#define PATA_DATA_16 ((volatile unsigned short *)0x00C00400)
|
#define PATA_DATA_16 ((volatile unsigned short *)0x00C00400)
|
||||||
#define PATA_DATA_8 ((volatile unsigned char *)0x00C00400)
|
#define PATA_DATA_8 ((volatile unsigned char *)0x00C00400)
|
||||||
|
|
||||||
#define PATA_ERROR ((volatile unsigned char *)0x00C00402)
|
#define PATA_ERROR ((volatile unsigned char *)0x00C00402)
|
||||||
#define PATA_ERR_AMNF 0x01 // Error: Address mark not found
|
|
||||||
#define PATA_ERR_TKZNF 0x02 // Error: Track 0 not found
|
|
||||||
#define PATA_ERR_ABRT 0x04 // Error: Aborted command
|
|
||||||
#define PATA_ERR_MCR 0x08 // Error: Media change request
|
|
||||||
#define PATA_ERR_IDNF 0x10 // Error: ID not found
|
|
||||||
#define PATA_ERR_MC 0x20 // Error: Media change
|
|
||||||
#define PATA_ERR_UNC 0x40 // Error: Uncorrectable data error
|
|
||||||
#define PATA_ERR_BBK 0x80 // Error: Bad block detected
|
|
||||||
|
|
||||||
#define PATA_SECT_CNT ((volatile unsigned char *)0x00C00404)
|
#define PATA_SECT_CNT ((volatile unsigned char *)0x00C00404)
|
||||||
#define PATA_SECT_SRT ((volatile unsigned char *)0x00C00406)
|
#define PATA_SECT_SRT ((volatile unsigned char *)0x00C00406)
|
||||||
#define PATA_CLDR_LO ((volatile unsigned char *)0x00C00408)
|
#define PATA_CLDR_LO ((volatile unsigned char *)0x00C00408)
|
||||||
#define PATA_CLDR_HI ((volatile unsigned char *)0x00C0040A)
|
#define PATA_CLDR_HI ((volatile unsigned char *)0x00C0040A)
|
||||||
#define PATA_HEAD ((volatile unsigned char *)0x00C0040C)
|
#define PATA_HEAD ((volatile unsigned char *)0x00C0040C)
|
||||||
|
|
||||||
#define PATA_CMD_STAT ((volatile unsigned char *)0x00C0040E)
|
#define PATA_CMD_STAT ((volatile unsigned char *)0x00C0040E)
|
||||||
#define PATA_STAT_BSY 0x80 // BSY (Busy) is set whenever the device has control of the command Block Registers.
|
|
||||||
#define PATA_STAT_DRDY 0x40 // DRDY (Device Ready) is set to indicate that the device is capable of accepting all command codes.
|
|
||||||
#define PATA_STAT_DF 0x20 // DF (Device Fault) indicates a device fault error has been detected.
|
|
||||||
#define PATA_STAT_DSC 0x10 // DSC (Device Seek Complete) indicates that the device heads are settled over a track.
|
|
||||||
#define PATA_STAT_DRQ 0x08 // DRQ (Data Request) indicates that the device is ready to transfer a unsigned short or char of data between
|
|
||||||
// the host and the device.
|
|
||||||
#define PATA_STAT_CORR 0x04 // CORR (Corrected Data) is used to indicate a correctable data error.
|
|
||||||
#define PATA_STAT_IDX 0x02 // Vendor specific bit
|
|
||||||
#define PATA_STAT_ERR 0x01 // ERR (Error) indicates that an error occurred during execution of the previous command.
|
|
||||||
|
|
||||||
#define PATA_CMD_INIT 0x00
|
|
||||||
#define PATA_CMD_READ_SECTOR 0x20 // 0x21
|
|
||||||
#define PATA_CMD_WRITE_SECTOR 0x30
|
|
||||||
#define PATA_CMD_IDENTITY 0xEC
|
|
||||||
|
|
||||||
/*
|
|
||||||
* - BSY (Busy) is set whenever the device has control of the command
|
|
||||||
* Block Registers. When the BSY bit is equal to one, a write to a
|
|
||||||
* command block register by the host shall be ignored by the
|
|
||||||
* device.
|
|
||||||
*
|
|
||||||
* The device shall not change the state of the DRQ bit unless the
|
|
||||||
* BSY bit is equal to one. When the last block of a PIO data in
|
|
||||||
* command has been transferred by the host, then the DRQ bit is
|
|
||||||
* cleared without the BSY bit being set.
|
|
||||||
*
|
|
||||||
* When the BSY bit equals zero, the device may only change the IDX,
|
|
||||||
* DRDY, DF, DSC, and CORR bits in the Status register and the Data
|
|
||||||
* register. None of the other command block registers nor other
|
|
||||||
* bits within the Status register shall be changed by the device.
|
|
||||||
*
|
|
||||||
* NOTE - BIOSs and software device drivers that sample status as
|
|
||||||
* soon as the BSY bit is cleared to zero may not detect the
|
|
||||||
* assertion of the CORR bit by the device. After the host has
|
|
||||||
* written the Command register either the BSY bit shall be set, or
|
|
||||||
* if the BSY bit is cleared, the DRQ bit shall be set, until
|
|
||||||
* command completion.
|
|
||||||
*
|
|
||||||
* NOTE - The BSY bit is set and then cleared so quickly, that host
|
|
||||||
* detection of the BSY bit being set is not certain.
|
|
||||||
*
|
|
||||||
* The BSY bit shall be set by the device under the following
|
|
||||||
* circumstances:
|
|
||||||
* a) within 400 ns after either the negation of RESET- or the
|
|
||||||
* setting of the SRST bit in the Device Control register;
|
|
||||||
* b) within 400 ns after writing the Command register if the DRQ
|
|
||||||
* bit is not set;
|
|
||||||
* c) between blocks of a data transfer during PIO data in
|
|
||||||
* commands if the DRQ bit is not set;
|
|
||||||
* d) after the transfer of a data block during PIO data out
|
|
||||||
* commands if the DRQ bit is not set;
|
|
||||||
* e) during the data transfer of DMA commands if the DRQ bit is
|
|
||||||
* not set.
|
|
||||||
*
|
|
||||||
* The device shall not set the BSY bit at any other time.
|
|
||||||
*
|
|
||||||
* - DRDY (Device Ready) is set to indicate that the device is capable
|
|
||||||
* of accepting all command codes. This bit shall be cleared at
|
|
||||||
* power on. Devices that implement the power management features
|
|
||||||
* shall maintain the DRDY bit equal to one when they are in the
|
|
||||||
* Idle or Standby power modes. When the state of the DRDY bit
|
|
||||||
* changes, it shall not change again until after the host reads the
|
|
||||||
* status register.
|
|
||||||
*
|
|
||||||
* When the DRDY bit is equal to zero, a device responds as follows:
|
|
||||||
* a) the device shall accept and attempt to execute the EXECUTE
|
|
||||||
* DEVICE DIAGNOSTIC and INITIALIZE DEVICE PARAMETERS commands;
|
|
||||||
* b) If a device accepts commands other than EXECUTE DEVICE
|
|
||||||
* DIAGNOSTIC and INITIALIZE DEVICE PARAMETERS during the time the
|
|
||||||
* DRDY bit is equal to zero, the results are vendor specific.
|
|
||||||
*
|
|
||||||
* - DF (Device Fault) indicates a device fault error has been
|
|
||||||
* detected. The internal status or internal conditions that causes
|
|
||||||
* this error to be indicated is vendor specific.
|
|
||||||
*
|
|
||||||
* - DSC (Device Seek Complete) indicates that the device heads are
|
|
||||||
* settled over a track. When an error occurs, this bit shall not be
|
|
||||||
* changed until the Status register is read by the host, at which
|
|
||||||
* time the bit again indicates the current Seek Complete status.
|
|
||||||
*
|
|
||||||
* - DRQ (Data Request) indicates that the device is ready to transfer
|
|
||||||
* a unsigned short or char of data between the host and the device.
|
|
||||||
*
|
|
||||||
* - CORR (Corrected Data) is used to indicate a correctable data
|
|
||||||
* error. The definition of what constitutes a correctable error is
|
|
||||||
* vendor specific. This condition does not terminate a data
|
|
||||||
* transfer.
|
|
||||||
*
|
|
||||||
* - IDX (Index) is vendor specific.
|
|
||||||
*
|
|
||||||
* - ERR (Error) indicates that an error occurred during execution of
|
|
||||||
* the previous command. The bits in the Error register have
|
|
||||||
* additional information regarding the cause of the error. Once the
|
|
||||||
* device has set the error bit, the device shall not change the
|
|
||||||
* contents of the following items until a new command has been
|
|
||||||
* accepted, the SRST bit is set to one, or RESET- is asserted: the
|
|
||||||
* ERR bit in the Status register.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
14
src/include/A2560K/ps2_a2560k.h
Normal file
14
src/include/A2560K/ps2_a2560k.h
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
#ifndef __PS2_A2560K_H
|
||||||
|
#define __PS2_A2560K_H
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Ports for the PS/2 keyboard and mouse on the A2560K
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define PS2_STATUS ((unsigned char *)0x00C02064)
|
||||||
|
#define PS2_CMD_BUF ((unsigned char *)0x00C02064)
|
||||||
|
#define PS2_OUT_BUF ((unsigned char *)0x00C02060)
|
||||||
|
#define PS2_INPT_BUF ((unsigned char *)0x00C02060)
|
||||||
|
#define PS2_DATA_BUF ((unsigned char *)0x00C02060)
|
||||||
|
|
||||||
|
#endif
|
|
@ -5,29 +5,9 @@
|
||||||
#ifndef __SDC_A2560K_H
|
#ifndef __SDC_A2560K_H
|
||||||
#define __SDC_A2560K_H
|
#define __SDC_A2560K_H
|
||||||
|
|
||||||
// SDC_TRANS_TYPE_REG
|
#define GABE_SDC_REG ((volatile unsigned short *)0x00C0051A)
|
||||||
#define SDC_TRANS_DIRECT 0x00 // 00 = Direct Access
|
#define GABE_SDC_PRESENT 0x0010 /* Is an SD card present? --- 0:Yes, 1:No */
|
||||||
#define SDC_TRANS_INIT_SD 0x01 // 01 = Init SD
|
#define GABE_SDC_WPROT 0x0020 /* Is the SD card write protected? --- 0:Yes, 1:No */
|
||||||
#define SDC_TRANS_READ_BLK 0x02 // 10 = RW_READ_BLOCK (512 Bytes)
|
|
||||||
#define SDC_TRANS_WRITE_BLK 0x03 // 11 = RW_WRITE_SD_BLOCK
|
|
||||||
|
|
||||||
// SDC_TRANS_CONTROL_REG
|
|
||||||
#define SDC_TRANS_START 0x01
|
|
||||||
// SDC_TRANS_STATUS_REG
|
|
||||||
#define SDC_TRANS_BUSY 0x01 // 1= Transaction Busy
|
|
||||||
// SDC_TRANS_ERROR_REG
|
|
||||||
#define SDC_TRANS_INIT_NO_ERR 0x00 // Init Error Report [1:0]
|
|
||||||
#define SDC_TRANS_INIT_CMD0_ERR 0x01
|
|
||||||
#define SDC_TRANS_INIT_CMD1_ERR 0x02
|
|
||||||
|
|
||||||
#define SDC_TRANS_RD_NO_ERR 0x00 // Read Error Report [3:2]
|
|
||||||
#define SDC_TRANS_RD_CMD_ERR 0x04
|
|
||||||
#define SDC_TRANS_RD_TOKEN_ERR 0x08
|
|
||||||
|
|
||||||
#define SDC_TRANS_WR_NO_ERR 0x00 // Write Report Error [5:4]
|
|
||||||
#define SDC_TRANS_WR_CMD_ERR 0x10
|
|
||||||
#define SDC_TRANS_WR_DATA_ERR 0x20
|
|
||||||
#define SDC_TRANS_WR_BUSY_ERR 0x30
|
|
||||||
|
|
||||||
#define SDC_VERSION_REG ((unsigned char *)0x00C00300)
|
#define SDC_VERSION_REG ((unsigned char *)0x00C00300)
|
||||||
#define SDC_CONTROL_REG ((unsigned char *)0x00C00301)
|
#define SDC_CONTROL_REG ((unsigned char *)0x00C00301)
|
||||||
|
|
212
src/include/A2560K/sound_a2560k.h
Normal file
212
src/include/A2560K/sound_a2560k.h
Normal file
|
@ -0,0 +1,212 @@
|
||||||
|
/*
|
||||||
|
* Sound device register definitions for the A2560K
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __SOUND_A2560K_H
|
||||||
|
#define __SOUND_A2560K_H
|
||||||
|
|
||||||
|
#define PSG_PORT ((volatile unsigned char *)0x00C20100) /* Control register for the SN76489 */
|
||||||
|
#define OPL3_PORT ((volatile unsigned char *)0x00C20200) /* Access port for the OPL3 */
|
||||||
|
#define OPM_EXT_BASE ((volatile unsigned char *)0x00C20600) /* External OPM base address */
|
||||||
|
#define OPN2_EXT_BASE ((volatile unsigned char *)0x00C20400) /* External OPN2 base address */
|
||||||
|
#define OPM_INT_BASE ((volatile unsigned char *)0x00C20C00) /* Internal OPM base address */
|
||||||
|
#define OPN2_INT_BASE ((volatile unsigned char *)0x00C20A00) /* Internal OPN2 base address */
|
||||||
|
#define CODEC ((volatile unsigned short *)0x00C20E00) /* Control register for the CODEC */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* A2560K supports two external, physical SID chips.
|
||||||
|
* It also implements the Gideon FPGA based SID in either stereo or mono (neutral) form
|
||||||
|
*
|
||||||
|
* $00C20800..$00C008FF - Extern Left SID
|
||||||
|
* $00C20900..$00C009FF - Extern Right SID
|
||||||
|
* $00C21000..$00C211FF - Internal SID Left
|
||||||
|
* $00C21200..$00C213FF - Internal SID Right
|
||||||
|
* $00C21400..$00C215FF - Internal SID Neutral
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* External SID Left Channel
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define SID_EXT_L_V1_FREQ_LO ((unsigned char *)0x00C20800)
|
||||||
|
#define SID_EXT_L_V1_FREQ_HI ((unsigned char *)0x00C20801)
|
||||||
|
#define SID_EXT_L_V1_PW_LO ((unsigned char *)0x00C20802)
|
||||||
|
#define SID_EXT_L_V1_PW_HI ((unsigned char *)0x00C20803)
|
||||||
|
#define SID_EXT_L_V1_CTRL ((unsigned char *)0x00C20804)
|
||||||
|
#define SID_EXT_L_V1_ATCK_DECY ((unsigned char *)0x00C20805)
|
||||||
|
#define SID_EXT_L_V1_SSTN_RLSE ((unsigned char *)0x00C20806)
|
||||||
|
#define SID_EXT_L_V2_FREQ_LO ((unsigned char *)0x00C20807)
|
||||||
|
#define SID_EXT_L_V2_FREQ_HI ((unsigned char *)0x00C20808)
|
||||||
|
#define SID_EXT_L_V2_PW_LO ((unsigned char *)0x00C20809)
|
||||||
|
#define SID_EXT_L_V2_PW_HI ((unsigned char *)0x00C2080A)
|
||||||
|
#define SID_EXT_L_V2_CTRL ((unsigned char *)0x00C2080B)
|
||||||
|
#define SID_EXT_L_V2_ATCK_DECY ((unsigned char *)0x00C2080C)
|
||||||
|
#define SID_EXT_L_V2_SSTN_RLSE ((unsigned char *)0x00C2080D)
|
||||||
|
#define SID_EXT_L_V3_FREQ_LO ((unsigned char *)0x00C2080E)
|
||||||
|
#define SID_EXT_L_V3_FREQ_HI ((unsigned char *)0x00C2080F)
|
||||||
|
#define SID_EXT_L_V3_PW_LO ((unsigned char *)0x00C20810)
|
||||||
|
#define SID_EXT_L_V3_PW_HI ((unsigned char *)0x00C20811)
|
||||||
|
#define SID_EXT_L_V3_CTRL ((unsigned char *)0x00C20812)
|
||||||
|
#define SID_EXT_L_V3_ATCK_DECY ((unsigned char *)0x00C20813)
|
||||||
|
#define SID_EXT_L_V3_SSTN_RLSE ((unsigned char *)0x00C20814)
|
||||||
|
#define SID_EXT_L_FC_LO ((unsigned char *)0x00C20815)
|
||||||
|
#define SID_EXT_L_FC_HI ((unsigned char *)0x00C20816)
|
||||||
|
#define SID_EXT_L_RES_FILT ((unsigned char *)0x00C20817)
|
||||||
|
#define SID_EXT_L_MODE_VOL ((unsigned char *)0x00C20818)
|
||||||
|
#define SID_EXT_L_POT_X ((unsigned char *)0x00C20819)
|
||||||
|
#define SID_EXT_L_POT_Y ((unsigned char *)0x00C2081A)
|
||||||
|
#define SID_EXT_L_OSC3_RND ((unsigned char *)0x00C2081B)
|
||||||
|
#define SID_EXT_L_ENV3 ((unsigned char *)0x00C2081C)
|
||||||
|
#define SID_EXT_L_NOT_USED0 ((unsigned char *)0x00C2081D)
|
||||||
|
#define SID_EXT_L_NOT_USED1 ((unsigned char *)0x00C2081E)
|
||||||
|
#define SID_EXT_L_NOT_USED2 ((unsigned char *)0x00C2081F)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* External SID Right Channel
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define SID_EXT_R_V1_FREQ_LO ((unsigned char *)0x00C20900)
|
||||||
|
#define SID_EXT_R_V1_FREQ_HI ((unsigned char *)0x00C20901)
|
||||||
|
#define SID_EXT_R_V1_PW_LO ((unsigned char *)0x00C20902)
|
||||||
|
#define SID_EXT_R_V1_PW_HI ((unsigned char *)0x00C20903)
|
||||||
|
#define SID_EXT_R_V1_CTRL ((unsigned char *)0x00C20904)
|
||||||
|
#define SID_EXT_R_V1_ATCK_DECY ((unsigned char *)0x00C20905)
|
||||||
|
#define SID_EXT_R_V1_SSTN_RLSE ((unsigned char *)0x00C20906)
|
||||||
|
#define SID_EXT_R_V2_FREQ_LO ((unsigned char *)0x00C20907)
|
||||||
|
#define SID_EXT_R_V2_FREQ_HI ((unsigned char *)0x00C20908)
|
||||||
|
#define SID_EXT_R_V2_PW_LO ((unsigned char *)0x00C20909)
|
||||||
|
#define SID_EXT_R_V2_PW_HI ((unsigned char *)0x00C2090A)
|
||||||
|
#define SID_EXT_R_V2_CTRL ((unsigned char *)0x00C2090B)
|
||||||
|
#define SID_EXT_R_V2_ATCK_DECY ((unsigned char *)0x00C2090C)
|
||||||
|
#define SID_EXT_R_V2_SSTN_RLSE ((unsigned char *)0x00C2090D)
|
||||||
|
#define SID_EXT_R_V3_FREQ_LO ((unsigned char *)0x00C2090E)
|
||||||
|
#define SID_EXT_R_V3_FREQ_HI ((unsigned char *)0x00C2090F)
|
||||||
|
#define SID_EXT_R_V3_PW_LO ((unsigned char *)0x00C20910)
|
||||||
|
#define SID_EXT_R_V3_PW_HI ((unsigned char *)0x00C20911)
|
||||||
|
#define SID_EXT_R_V3_CTRL ((unsigned char *)0x00C20912)
|
||||||
|
#define SID_EXT_R_V3_ATCK_DECY ((unsigned char *)0x00C20913)
|
||||||
|
#define SID_EXT_R_V3_SSTN_RLSE ((unsigned char *)0x00C20914)
|
||||||
|
#define SID_EXT_R_FC_LO ((unsigned char *)0x00C20915)
|
||||||
|
#define SID_EXT_R_FC_HI ((unsigned char *)0x00C20916)
|
||||||
|
#define SID_EXT_R_RES_FILT ((unsigned char *)0x00C20917)
|
||||||
|
#define SID_EXT_R_MODE_VOL ((unsigned char *)0x00C20918)
|
||||||
|
#define SID_EXT_R_POT_X ((unsigned char *)0x00C20919)
|
||||||
|
#define SID_EXT_R_POT_Y ((unsigned char *)0x00C2091A)
|
||||||
|
#define SID_EXT_R_OSC3_RND ((unsigned char *)0x00C2091B)
|
||||||
|
#define SID_EXT_R_ENV3 ((unsigned char *)0x00C2091C)
|
||||||
|
#define SID_EXT_R_NOT_USED0 ((unsigned char *)0x00C2091D)
|
||||||
|
#define SID_EXT_R_NOT_USED1 ((unsigned char *)0x00C2091E)
|
||||||
|
#define SID_EXT_R_NOT_USED2 ((unsigned char *)0x00C2091F)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Internal SID Left Channel
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define SID_INT_L_V1_FREQ_LO ((unsigned char *)0x00C21000)
|
||||||
|
#define SID_INT_L_V1_FREQ_HI ((unsigned char *)0x00C21001)
|
||||||
|
#define SID_INT_L_V1_PW_LO ((unsigned char *)0x00C21002)
|
||||||
|
#define SID_INT_L_V1_PW_HI ((unsigned char *)0x00C21003)
|
||||||
|
#define SID_INT_L_V1_CTRL ((unsigned char *)0x00C21004)
|
||||||
|
#define SID_INT_L_V1_ATCK_DECY ((unsigned char *)0x00C21005)
|
||||||
|
#define SID_INT_L_V1_SSTN_RLSE ((unsigned char *)0x00C21006)
|
||||||
|
#define SID_INT_L_V2_FREQ_LO ((unsigned char *)0x00C21007)
|
||||||
|
#define SID_INT_L_V2_FREQ_HI ((unsigned char *)0x00C21008)
|
||||||
|
#define SID_INT_L_V2_PW_LO ((unsigned char *)0x00C21009)
|
||||||
|
#define SID_INT_L_V2_PW_HI ((unsigned char *)0x00C2100A)
|
||||||
|
#define SID_INT_L_V2_CTRL ((unsigned char *)0x00C2100B)
|
||||||
|
#define SID_INT_L_V2_ATCK_DECY ((unsigned char *)0x00C2100C)
|
||||||
|
#define SID_INT_L_V2_SSTN_RLSE ((unsigned char *)0x00C2100D)
|
||||||
|
#define SID_INT_L_V3_FREQ_LO ((unsigned char *)0x00C2100E)
|
||||||
|
#define SID_INT_L_V3_FREQ_HI ((unsigned char *)0x00C2100F)
|
||||||
|
#define SID_INT_L_V3_PW_LO ((unsigned char *)0x00C21010)
|
||||||
|
#define SID_INT_L_V3_PW_HI ((unsigned char *)0x00C21011)
|
||||||
|
#define SID_INT_L_V3_CTRL ((unsigned char *)0x00C21012)
|
||||||
|
#define SID_INT_L_V3_ATCK_DECY ((unsigned char *)0x00C21013)
|
||||||
|
#define SID_INT_L_V3_SSTN_RLSE ((unsigned char *)0x00C21014)
|
||||||
|
#define SID_INT_L_FC_LO ((unsigned char *)0x00C21015)
|
||||||
|
#define SID_INT_L_FC_HI ((unsigned char *)0x00C21016)
|
||||||
|
#define SID_INT_L_RES_FILT ((unsigned char *)0x00C21017)
|
||||||
|
#define SID_INT_L_MODE_VOL ((unsigned char *)0x00C21018)
|
||||||
|
#define SID_INT_L_POT_X ((unsigned char *)0x00C21019)
|
||||||
|
#define SID_INT_L_POT_Y ((unsigned char *)0x00C2101A)
|
||||||
|
#define SID_INT_L_OSC3_RND ((unsigned char *)0x00C2101B)
|
||||||
|
#define SID_INT_L_ENV3 ((unsigned char *)0x00C2101C)
|
||||||
|
#define SID_INT_L_NOT_USED0 ((unsigned char *)0x00C2101D)
|
||||||
|
#define SID_INT_L_NOT_USED1 ((unsigned char *)0x00C2101E)
|
||||||
|
#define SID_INT_L_NOT_USED2 ((unsigned char *)0x00C2101F)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Internal SID Right Channel
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define SID_INT_R_V1_FREQ_LO ((unsigned char *)0x00C21200)
|
||||||
|
#define SID_INT_R_V1_FREQ_HI ((unsigned char *)0x00C21201)
|
||||||
|
#define SID_INT_R_V1_PW_LO ((unsigned char *)0x00C21202)
|
||||||
|
#define SID_INT_R_V1_PW_HI ((unsigned char *)0x00C21203)
|
||||||
|
#define SID_INT_R_V1_CTRL ((unsigned char *)0x00C21204)
|
||||||
|
#define SID_INT_R_V1_ATCK_DECY ((unsigned char *)0x00C21205)
|
||||||
|
#define SID_INT_R_V1_SSTN_RLSE ((unsigned char *)0x00C21206)
|
||||||
|
#define SID_INT_R_V2_FREQ_LO ((unsigned char *)0x00C21207)
|
||||||
|
#define SID_INT_R_V2_FREQ_HI ((unsigned char *)0x00C21208)
|
||||||
|
#define SID_INT_R_V2_PW_LO ((unsigned char *)0x00C21209)
|
||||||
|
#define SID_INT_R_V2_PW_HI ((unsigned char *)0x00C2120A)
|
||||||
|
#define SID_INT_R_V2_CTRL ((unsigned char *)0x00C2120B)
|
||||||
|
#define SID_INT_R_V2_ATCK_DECY ((unsigned char *)0x00C2120C)
|
||||||
|
#define SID_INT_R_V2_SSTN_RLSE ((unsigned char *)0x00C2120D)
|
||||||
|
#define SID_INT_R_V3_FREQ_LO ((unsigned char *)0x00C2120E)
|
||||||
|
#define SID_INT_R_V3_FREQ_HI ((unsigned char *)0x00C2120F)
|
||||||
|
#define SID_INT_R_V3_PW_LO ((unsigned char *)0x00C21210)
|
||||||
|
#define SID_INT_R_V3_PW_HI ((unsigned char *)0x00C21211)
|
||||||
|
#define SID_INT_R_V3_CTRL ((unsigned char *)0x00C21212)
|
||||||
|
#define SID_INT_R_V3_ATCK_DECY ((unsigned char *)0x00C21213)
|
||||||
|
#define SID_INT_R_V3_SSTN_RLSE ((unsigned char *)0x00C21214)
|
||||||
|
#define SID_INT_R_FC_LO ((unsigned char *)0x00C21215)
|
||||||
|
#define SID_INT_R_FC_HI ((unsigned char *)0x00C21216)
|
||||||
|
#define SID_INT_R_RES_FILT ((unsigned char *)0x00C21217)
|
||||||
|
#define SID_INT_R_MODE_VOL ((unsigned char *)0x00C21218)
|
||||||
|
#define SID_INT_R_POT_X ((unsigned char *)0x00C21219)
|
||||||
|
#define SID_INT_R_POT_Y ((unsigned char *)0x00C2121A)
|
||||||
|
#define SID_INT_R_OSC3_RND ((unsigned char *)0x00C2121B)
|
||||||
|
#define SID_INT_R_ENV3 ((unsigned char *)0x00C2121C)
|
||||||
|
#define SID_INT_R_NOT_USED0 ((unsigned char *)0x00C2121D)
|
||||||
|
#define SID_INT_R_NOT_USED1 ((unsigned char *)0x00C2121E)
|
||||||
|
#define SID_INT_R_NOT_USED2 ((unsigned char *)0x00C2121F)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Internal SID Neutral Channel - When writting here, the value is written in R and L Channel at the same time
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define SID_INT_N_V1_FREQ_LO ((unsigned char *)0x00C41200)
|
||||||
|
#define SID_INT_N_V1_FREQ_HI ((unsigned char *)0x00C41201)
|
||||||
|
#define SID_INT_N_V1_PW_LO ((unsigned char *)0x00C41202)
|
||||||
|
#define SID_INT_N_V1_PW_HI ((unsigned char *)0x00C41203)
|
||||||
|
#define SID_INT_N_V1_CTRL ((unsigned char *)0x00C41204)
|
||||||
|
#define SID_INT_N_V1_ATCK_DECY ((unsigned char *)0x00C41205)
|
||||||
|
#define SID_INT_N_V1_SSTN_RLSE ((unsigned char *)0x00C41206)
|
||||||
|
#define SID_INT_N_V2_FREQ_LO ((unsigned char *)0x00C41207)
|
||||||
|
#define SID_INT_N_V2_FREQ_HI ((unsigned char *)0x00C41208)
|
||||||
|
#define SID_INT_N_V2_PW_LO ((unsigned char *)0x00C41209)
|
||||||
|
#define SID_INT_N_V2_PW_HI ((unsigned char *)0x00C4120A)
|
||||||
|
#define SID_INT_N_V2_CTRL ((unsigned char *)0x00C4120B)
|
||||||
|
#define SID_INT_N_V2_ATCK_DECY ((unsigned char *)0x00C4120C)
|
||||||
|
#define SID_INT_N_V2_SSTN_RLSE ((unsigned char *)0x00C4120D)
|
||||||
|
#define SID_INT_N_V3_FREQ_LO ((unsigned char *)0x00C4120E)
|
||||||
|
#define SID_INT_N_V3_FREQ_HI ((unsigned char *)0x00C4120F)
|
||||||
|
#define SID_INT_N_V3_PW_LO ((unsigned char *)0x00C41210)
|
||||||
|
#define SID_INT_N_V3_PW_HI ((unsigned char *)0x00C41211)
|
||||||
|
#define SID_INT_N_V3_CTRL ((unsigned char *)0x00C41212)
|
||||||
|
#define SID_INT_N_V3_ATCK_DECY ((unsigned char *)0x00C41213)
|
||||||
|
#define SID_INT_N_V3_SSTN_RLSE ((unsigned char *)0x00C41214)
|
||||||
|
#define SID_INT_N_FC_LO ((unsigned char *)0x00C41215)
|
||||||
|
#define SID_INT_N_FC_HI ((unsigned char *)0x00C41216)
|
||||||
|
#define SID_INT_N_RES_FILT ((unsigned char *)0x00C41217)
|
||||||
|
#define SID_INT_N_MODE_VOL ((unsigned char *)0x00C41218)
|
||||||
|
#define SID_INT_N_POT_X ((unsigned char *)0x00C41219)
|
||||||
|
#define SID_INT_N_POT_Y ((unsigned char *)0x00C4121A)
|
||||||
|
#define SID_INT_N_OSC3_RND ((unsigned char *)0x00C4121B)
|
||||||
|
#define SID_INT_N_ENV3 ((unsigned char *)0x00C4121C)
|
||||||
|
#define SID_INT_N_NOT_USED0 ((unsigned char *)0x00C4121D)
|
||||||
|
#define SID_INT_N_NOT_USED1 ((unsigned char *)0x00C4121E)
|
||||||
|
#define SID_INT_N_NOT_USED2 ((unsigned char *)0x00C4121F)
|
||||||
|
|
||||||
|
#endif
|
98
src/include/A2560U/VICKYIII_a2560u.h
Normal file
98
src/include/A2560U/VICKYIII_a2560u.h
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
/*
|
||||||
|
* Registers and memory blocks for VICKY III on the A2560U and A2560U+
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __VICKYIII_General_H
|
||||||
|
#define __VICKYIII_General_H
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Screen Channel A
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define MasterControlReg_A ((volatile unsigned long *)0x00B40000)
|
||||||
|
#define VKY3_MCR_TEXT_EN 0x00000001 /* Text Mode Enable */
|
||||||
|
#define VKY3_MCR_TEXT_OVRLY 0x00000002 /* Text Mode overlay */
|
||||||
|
#define VKY3_MCR_GRAPH_EN 0x00000004 /* Graphic Mode Enable */
|
||||||
|
#define VKY3_MCR_BITMAP_EN 0x00000008 /* Bitmap Engine Enable */
|
||||||
|
#define VKY3_MCR_RESOLUTION_MASK 0x00000300 /* Resolution - 00: 640x480, 01:800x600, 10: 1024x768, 11: 640x400 */
|
||||||
|
#define VKY3_MCR_640x480 0x00000000
|
||||||
|
#define VKY3_MCR_800x600 0x00000100
|
||||||
|
#define VKY3_MCR_1024x768 0x00000200
|
||||||
|
#define VKY3_MCR_640x400 0x00000300
|
||||||
|
#define VKY3_MCR_DOUBLE_EN 0x00000400 /* Doubling Pixel */
|
||||||
|
#define VKY3_MCR_GAMMA_EN 0x00010000 /* GAMMA Enable */
|
||||||
|
#define VKY3_MCR_MANUAL_GAMMA_EN 0x00020000 /* Enable Manual GAMMA Enable */
|
||||||
|
#define VKY3_MCR_BLANK_EN 0x00040000 /* Turn OFF sync (to monitor in sleep mode) */
|
||||||
|
|
||||||
|
/* Access to DIP switch information (read only) */
|
||||||
|
#define VKY3_DIP_REG ((volatile unsigned short *)0x00B40002)
|
||||||
|
/* Bits 0 - 12: Master Control Register data */
|
||||||
|
#define VKY3_DIP_GAMMA 0x2000 /* DIP switch indication for Gamma correction */
|
||||||
|
#define VKY3_DIP_HIRES 0x4000 /* DIP switch for high resolution mode */
|
||||||
|
#define VKY3_PLL_ACTIVE_CLK 0x8000 /* Active Clock --- 0: 25.175Mhz, 1: 40Mhz */
|
||||||
|
|
||||||
|
#define BorderControlReg_L_A ((volatile unsigned long *)0x00B40004)
|
||||||
|
#define VKY3_BRDR_EN 0x00000001 /* Border Enable */
|
||||||
|
#define VKY3_X_SCROLL_MASK 0x00000070 /* X Scroll */
|
||||||
|
#define VKY3_X_SIZE_MASK 0x00003f00 /* X Size */
|
||||||
|
#define VKY3_Y_SIZE_MASK 0x003f0000 /* Y Size */
|
||||||
|
|
||||||
|
#define BorderControlReg_H_A ((volatile unsigned long *)0x00B40008)
|
||||||
|
#define BackGroundControlReg_A ((volatile unsigned long *)0x00B4000C)
|
||||||
|
#define CursorControlReg_L_A ((volatile unsigned long *)0x00B40010)
|
||||||
|
#define CursorControlReg_H_A ((volatile unsigned long *)0x00B40014)
|
||||||
|
|
||||||
|
#define LineInterrupt0_A ((volatile unsigned short *)0x00B40018)
|
||||||
|
#define LineInterrupt1_A ((volatile unsigned short *)0x00B4001A)
|
||||||
|
#define LineInterrupt2_A ((volatile unsigned short *)0x00B4001C)
|
||||||
|
#define LineInterrupt3_A ((volatile unsigned short *)0x00B4001E)
|
||||||
|
|
||||||
|
#define MousePointer_Mem_A ((volatile unsigned short *)0x00B40400)
|
||||||
|
#define MousePtr_A_CTRL_Reg ((volatile unsigned short *)0x00B40C00)
|
||||||
|
#define MousePtr_En 0x0001
|
||||||
|
|
||||||
|
#define MousePtr_A_X_Pos ((volatile unsigned short *)0x00B40C02)
|
||||||
|
#define MousePtr_A_Y_Pos ((volatile unsigned short *)0x00B40C04)
|
||||||
|
#define MousePtr_A_Mouse0 ((volatile unsigned short *)0x00B40C0A)
|
||||||
|
#define MousePtr_A_Mouse1 ((volatile unsigned short *)0x00B40C0C)
|
||||||
|
#define MousePtr_A_Mouse2 ((volatile unsigned short *)0x00B40C0E)
|
||||||
|
|
||||||
|
#define ScreenText_A ((volatile char *)0x00B60000) /* Text matrix */
|
||||||
|
#define ColorText_A ((volatile unsigned char *)0x00B68000) /* Color matrix */
|
||||||
|
#define FG_CLUT_A ((volatile unsigned short *)0x00B6C400) /* Foreground LUT */
|
||||||
|
#define BG_CLUT_A ((volatile unsigned short *)0x00B6C440) /* Background LUT */
|
||||||
|
|
||||||
|
#define BM0_Control_Reg ((volatile unsigned long *)0x00B40100)
|
||||||
|
#define BM0_Addy_Pointer_Reg ((volatile unsigned long *)0x00B40104)
|
||||||
|
|
||||||
|
#define Sprite_0_CTRL ((volatile unsigned short *)0x00B41000)
|
||||||
|
#define Sprite_0_ADDY_HI ((volatile unsigned short *)0x00B41002)
|
||||||
|
#define Sprite_0_POS_X ((volatile unsigned short *)0x00B41004)
|
||||||
|
#define Sprite_0_POS_Y ((volatile unsigned short *)0x00B41006)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Color lookup tables
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define LUT_0 ((volatile unsigned char *)0x00B42000)
|
||||||
|
#define LUT_1 ((volatile unsigned char *)0x00B42400)
|
||||||
|
#define LUT_2 ((volatile unsigned char *)0x00B42800)
|
||||||
|
#define LUT_3 ((volatile unsigned char *)0x00B42C00)
|
||||||
|
#define LUT_4 ((volatile unsigned char *)0x00B43000)
|
||||||
|
#define LUT_5 ((volatile unsigned char *)0x00B43400)
|
||||||
|
#define LUT_6 ((volatile unsigned char *)0x00B43800)
|
||||||
|
#define LUT_7 ((volatile unsigned char *)0x00B43C00)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Text mode font memory
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define VICKY_TXT_FONT_A ((volatile unsigned char *)0x00B48000) /* $00C48000..$00C48FFF - FONT MEMORY Channel A */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Location of VRAM
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define VRAM_Bank0 ((volatile unsigned char *)0x00C00000)
|
||||||
|
|
||||||
|
#endif
|
18
src/include/A2560U/pata_a2560u.h
Normal file
18
src/include/A2560U/pata_a2560u.h
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Definitions to access the PATA port on the A2560U and A2560U+
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __PATA_A2560U_H
|
||||||
|
#define __PATA_A2560U_H
|
||||||
|
|
||||||
|
#define PATA_DATA_16 ((volatile unsigned short *)0x00B00400)
|
||||||
|
#define PATA_DATA_8 ((volatile unsigned char *)0x00B00400)
|
||||||
|
#define PATA_ERROR ((volatile unsigned char *)0x00B00402)
|
||||||
|
#define PATA_SECT_CNT ((volatile unsigned char *)0x00B00404)
|
||||||
|
#define PATA_SECT_SRT ((volatile unsigned char *)0x00B00406)
|
||||||
|
#define PATA_CLDR_LO ((volatile unsigned char *)0x00B00408)
|
||||||
|
#define PATA_CLDR_HI ((volatile unsigned char *)0x00B0040A)
|
||||||
|
#define PATA_HEAD ((volatile unsigned char *)0x00B0040C)
|
||||||
|
#define PATA_CMD_STAT ((volatile unsigned char *)0x00B0040E)
|
||||||
|
|
||||||
|
#endif
|
14
src/include/A2560U/ps2_a2560u.h
Normal file
14
src/include/A2560U/ps2_a2560u.h
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
#ifndef __PS2_A2560U_H
|
||||||
|
#define __PS2_A2560U_H
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Ports for the PS/2 keyboard and mouse on the A2560U and A2560U+
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define PS2_STATUS ((unsigned char *)0x00B02804)
|
||||||
|
#define PS2_CMD_BUF ((unsigned char *)0x00B02804)
|
||||||
|
#define PS2_OUT_BUF ((unsigned char *)0x00B02800)
|
||||||
|
#define PS2_INPT_BUF ((unsigned char *)0x00B02800)
|
||||||
|
#define PS2_DATA_BUF ((unsigned char *)0x00B02800)
|
||||||
|
|
||||||
|
#endif
|
35
src/include/A2560U/sdc_a2560u.h
Normal file
35
src/include/A2560U/sdc_a2560u.h
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
/*
|
||||||
|
* Definitions for access to the SDC controller for the A2560U and A2560U+
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __SDC_A2560U_H
|
||||||
|
#define __SDC_A2560U_H
|
||||||
|
|
||||||
|
#define GABE_SDC_REG ((volatile unsigned short *)0x00B0051A)
|
||||||
|
#define GABE_SDC_PRESENT 0x0010 /* Is an SD card present? --- 0:Yes, 1:No */
|
||||||
|
#define GABE_SDC_WPROT 0x0020 /* Is the SD card write protected? --- 0:Yes, 1:No */
|
||||||
|
|
||||||
|
#define SDC_VERSION_REG ((unsigned char *)0x00B00300)
|
||||||
|
#define SDC_CONTROL_REG ((unsigned char *)0x00B00301)
|
||||||
|
#define SDC_TRANS_TYPE_REG ((unsigned char *)0x00B00302)
|
||||||
|
|
||||||
|
#define SDC_TRANS_CONTROL_REG ((unsigned char *)0x00B00303)
|
||||||
|
#define SDC_TRANS_STATUS_REG ((unsigned char *)0x00B00304)
|
||||||
|
#define SDC_TRANS_ERROR_REG ((unsigned char *)0x00B00305)
|
||||||
|
#define SDC_DIRECT_ACCESS_REG ((unsigned char *)0x00B00306)
|
||||||
|
#define SDC_SD_ADDR_7_0_REG ((unsigned char *)0x00B00307)
|
||||||
|
#define SDC_SD_ADDR_15_8_REG ((unsigned char *)0x00B00308)
|
||||||
|
#define SDC_SD_ADDR_23_16_REG ((unsigned char *)0x00B00309)
|
||||||
|
#define SDC_SD_ADDR_31_24_REG ((unsigned char *)0x00B0030A)
|
||||||
|
|
||||||
|
#define SDC_SPI_CLK_DEL_REG ((unsigned char *)0x00B0030B)
|
||||||
|
|
||||||
|
#define SDC_RX_FIFO_DATA_REG ((unsigned char *)0x00B00310)
|
||||||
|
#define SDC_RX_FIFO_DATA_CNT_HI ((unsigned char *)0x00B00312)
|
||||||
|
#define SDC_RX_FIFO_DATA_CNT_LO ((unsigned char *)0x00B00313)
|
||||||
|
#define SDC_RX_FIFO_CTRL_REG ((unsigned char *)0x00B00314)
|
||||||
|
|
||||||
|
#define SDC_TX_FIFO_DATA_REG ((unsigned char *)0x00B00320)
|
||||||
|
#define SDC_TX_FIFO_CTRL_REG ((unsigned char *)0x00B00324)
|
||||||
|
|
||||||
|
#endif
|
134
src/include/A2560U/sound_a2560u.h
Normal file
134
src/include/A2560U/sound_a2560u.h
Normal file
|
@ -0,0 +1,134 @@
|
||||||
|
/*
|
||||||
|
* Sound device register definitions for the A2560U and A2560U+
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __SOUND_A2560U_H
|
||||||
|
#define __SOUND_A2560U_H
|
||||||
|
|
||||||
|
#define PSG_PORT ((volatile unsigned char *)0x00B20130) /* Control register for the SN76489 */
|
||||||
|
#define OPL3_PORT ((volatile unsigned char *)0x00B20200) /* Access port for the OPL3 */
|
||||||
|
#define OPM_INT_BASE ((volatile unsigned char *)0x00B20C00) /* Internal OPM base address */
|
||||||
|
#define OPN2_INT_BASE ((volatile unsigned char *)0x00B20A00) /* Internal OPN2 base address */
|
||||||
|
#define CODEC ((volatile unsigned short *)0x00B20E00) /* Control register for the CODEC */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* A2560U supports two external, physical SID chips.
|
||||||
|
* It also implements the Gideon FPGA based SID in either stereo or mono (neutral) form
|
||||||
|
*
|
||||||
|
* $00C21000..$00C211FF - Internal SID Left
|
||||||
|
* $00C21200..$00C213FF - Internal SID Right
|
||||||
|
* $00C21400..$00C215FF - Internal SID Neutral
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Internal SID Left Channel
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define SID_INT_L_V1_FREQ_LO ((unsigned char *)0x00B21000)
|
||||||
|
#define SID_INT_L_V1_FREQ_HI ((unsigned char *)0x00B21001)
|
||||||
|
#define SID_INT_L_V1_PW_LO ((unsigned char *)0x00B21002)
|
||||||
|
#define SID_INT_L_V1_PW_HI ((unsigned char *)0x00B21003)
|
||||||
|
#define SID_INT_L_V1_CTRL ((unsigned char *)0x00B21004)
|
||||||
|
#define SID_INT_L_V1_ATCK_DECY ((unsigned char *)0x00B21005)
|
||||||
|
#define SID_INT_L_V1_SSTN_RLSE ((unsigned char *)0x00B21006)
|
||||||
|
#define SID_INT_L_V2_FREQ_LO ((unsigned char *)0x00B21007)
|
||||||
|
#define SID_INT_L_V2_FREQ_HI ((unsigned char *)0x00B21008)
|
||||||
|
#define SID_INT_L_V2_PW_LO ((unsigned char *)0x00B21009)
|
||||||
|
#define SID_INT_L_V2_PW_HI ((unsigned char *)0x00B2100A)
|
||||||
|
#define SID_INT_L_V2_CTRL ((unsigned char *)0x00B2100B)
|
||||||
|
#define SID_INT_L_V2_ATCK_DECY ((unsigned char *)0x00B2100C)
|
||||||
|
#define SID_INT_L_V2_SSTN_RLSE ((unsigned char *)0x00B2100D)
|
||||||
|
#define SID_INT_L_V3_FREQ_LO ((unsigned char *)0x00B2100E)
|
||||||
|
#define SID_INT_L_V3_FREQ_HI ((unsigned char *)0x00B2100F)
|
||||||
|
#define SID_INT_L_V3_PW_LO ((unsigned char *)0x00B21010)
|
||||||
|
#define SID_INT_L_V3_PW_HI ((unsigned char *)0x00B21011)
|
||||||
|
#define SID_INT_L_V3_CTRL ((unsigned char *)0x00B21012)
|
||||||
|
#define SID_INT_L_V3_ATCK_DECY ((unsigned char *)0x00B21013)
|
||||||
|
#define SID_INT_L_V3_SSTN_RLSE ((unsigned char *)0x00B21014)
|
||||||
|
#define SID_INT_L_FC_LO ((unsigned char *)0x00B21015)
|
||||||
|
#define SID_INT_L_FC_HI ((unsigned char *)0x00B21016)
|
||||||
|
#define SID_INT_L_RES_FILT ((unsigned char *)0x00B21017)
|
||||||
|
#define SID_INT_L_MODE_VOL ((unsigned char *)0x00B21018)
|
||||||
|
#define SID_INT_L_POT_X ((unsigned char *)0x00B21019)
|
||||||
|
#define SID_INT_L_POT_Y ((unsigned char *)0x00B2101A)
|
||||||
|
#define SID_INT_L_OSC3_RND ((unsigned char *)0x00B2101B)
|
||||||
|
#define SID_INT_L_ENV3 ((unsigned char *)0x00B2101C)
|
||||||
|
#define SID_INT_L_NOT_USED0 ((unsigned char *)0x00B2101D)
|
||||||
|
#define SID_INT_L_NOT_USED1 ((unsigned char *)0x00B2101E)
|
||||||
|
#define SID_INT_L_NOT_USED2 ((unsigned char *)0x00B2101F)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Internal SID Right Channel
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define SID_INT_R_V1_FREQ_LO ((unsigned char *)0x00B21200)
|
||||||
|
#define SID_INT_R_V1_FREQ_HI ((unsigned char *)0x00B21201)
|
||||||
|
#define SID_INT_R_V1_PW_LO ((unsigned char *)0x00B21202)
|
||||||
|
#define SID_INT_R_V1_PW_HI ((unsigned char *)0x00B21203)
|
||||||
|
#define SID_INT_R_V1_CTRL ((unsigned char *)0x00B21204)
|
||||||
|
#define SID_INT_R_V1_ATCK_DECY ((unsigned char *)0x00B21205)
|
||||||
|
#define SID_INT_R_V1_SSTN_RLSE ((unsigned char *)0x00B21206)
|
||||||
|
#define SID_INT_R_V2_FREQ_LO ((unsigned char *)0x00B21207)
|
||||||
|
#define SID_INT_R_V2_FREQ_HI ((unsigned char *)0x00B21208)
|
||||||
|
#define SID_INT_R_V2_PW_LO ((unsigned char *)0x00B21209)
|
||||||
|
#define SID_INT_R_V2_PW_HI ((unsigned char *)0x00B2120A)
|
||||||
|
#define SID_INT_R_V2_CTRL ((unsigned char *)0x00B2120B)
|
||||||
|
#define SID_INT_R_V2_ATCK_DECY ((unsigned char *)0x00B2120C)
|
||||||
|
#define SID_INT_R_V2_SSTN_RLSE ((unsigned char *)0x00B2120D)
|
||||||
|
#define SID_INT_R_V3_FREQ_LO ((unsigned char *)0x00B2120E)
|
||||||
|
#define SID_INT_R_V3_FREQ_HI ((unsigned char *)0x00B2120F)
|
||||||
|
#define SID_INT_R_V3_PW_LO ((unsigned char *)0x00B21210)
|
||||||
|
#define SID_INT_R_V3_PW_HI ((unsigned char *)0x00B21211)
|
||||||
|
#define SID_INT_R_V3_CTRL ((unsigned char *)0x00B21212)
|
||||||
|
#define SID_INT_R_V3_ATCK_DECY ((unsigned char *)0x00B21213)
|
||||||
|
#define SID_INT_R_V3_SSTN_RLSE ((unsigned char *)0x00B21214)
|
||||||
|
#define SID_INT_R_FC_LO ((unsigned char *)0x00B21215)
|
||||||
|
#define SID_INT_R_FC_HI ((unsigned char *)0x00B21216)
|
||||||
|
#define SID_INT_R_RES_FILT ((unsigned char *)0x00B21217)
|
||||||
|
#define SID_INT_R_MODE_VOL ((unsigned char *)0x00B21218)
|
||||||
|
#define SID_INT_R_POT_X ((unsigned char *)0x00B21219)
|
||||||
|
#define SID_INT_R_POT_Y ((unsigned char *)0x00B2121A)
|
||||||
|
#define SID_INT_R_OSC3_RND ((unsigned char *)0x00B2121B)
|
||||||
|
#define SID_INT_R_ENV3 ((unsigned char *)0x00B2121C)
|
||||||
|
#define SID_INT_R_NOT_USED0 ((unsigned char *)0x00B2121D)
|
||||||
|
#define SID_INT_R_NOT_USED1 ((unsigned char *)0x00B2121E)
|
||||||
|
#define SID_INT_R_NOT_USED2 ((unsigned char *)0x00B2121F)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Internal SID Neutral Channel - When writting here, the value is written in R and L Channel at the same time
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define SID_INT_N_V1_FREQ_LO ((unsigned char *)0x00B21400)
|
||||||
|
#define SID_INT_N_V1_FREQ_HI ((unsigned char *)0x00B21401)
|
||||||
|
#define SID_INT_N_V1_PW_LO ((unsigned char *)0x00B21402)
|
||||||
|
#define SID_INT_N_V1_PW_HI ((unsigned char *)0x00B21403)
|
||||||
|
#define SID_INT_N_V1_CTRL ((unsigned char *)0x00B21404)
|
||||||
|
#define SID_INT_N_V1_ATCK_DECY ((unsigned char *)0x00B21405)
|
||||||
|
#define SID_INT_N_V1_SSTN_RLSE ((unsigned char *)0x00B21406)
|
||||||
|
#define SID_INT_N_V2_FREQ_LO ((unsigned char *)0x00B21407)
|
||||||
|
#define SID_INT_N_V2_FREQ_HI ((unsigned char *)0x00B21408)
|
||||||
|
#define SID_INT_N_V2_PW_LO ((unsigned char *)0x00B21409)
|
||||||
|
#define SID_INT_N_V2_PW_HI ((unsigned char *)0x00B2140A)
|
||||||
|
#define SID_INT_N_V2_CTRL ((unsigned char *)0x00B2140B)
|
||||||
|
#define SID_INT_N_V2_ATCK_DECY ((unsigned char *)0x00B2140C)
|
||||||
|
#define SID_INT_N_V2_SSTN_RLSE ((unsigned char *)0x00B2140D)
|
||||||
|
#define SID_INT_N_V3_FREQ_LO ((unsigned char *)0x00B2140E)
|
||||||
|
#define SID_INT_N_V3_FREQ_HI ((unsigned char *)0x00B2140F)
|
||||||
|
#define SID_INT_N_V3_PW_LO ((unsigned char *)0x00B21410)
|
||||||
|
#define SID_INT_N_V3_PW_HI ((unsigned char *)0x00B21411)
|
||||||
|
#define SID_INT_N_V3_CTRL ((unsigned char *)0x00B21412)
|
||||||
|
#define SID_INT_N_V3_ATCK_DECY ((unsigned char *)0x00B21413)
|
||||||
|
#define SID_INT_N_V3_SSTN_RLSE ((unsigned char *)0x00B21414)
|
||||||
|
#define SID_INT_N_FC_LO ((unsigned char *)0x00B21415)
|
||||||
|
#define SID_INT_N_FC_HI ((unsigned char *)0x00B21416)
|
||||||
|
#define SID_INT_N_RES_FILT ((unsigned char *)0x00B21417)
|
||||||
|
#define SID_INT_N_MODE_VOL ((unsigned char *)0x00B21418)
|
||||||
|
#define SID_INT_N_POT_X ((unsigned char *)0x00B21419)
|
||||||
|
#define SID_INT_N_POT_Y ((unsigned char *)0x00B2141A)
|
||||||
|
#define SID_INT_N_OSC3_RND ((unsigned char *)0x00B2141B)
|
||||||
|
#define SID_INT_N_ENV3 ((unsigned char *)0x00B2141C)
|
||||||
|
#define SID_INT_N_NOT_USED0 ((unsigned char *)0x00B2141D)
|
||||||
|
#define SID_INT_N_NOT_USED1 ((unsigned char *)0x00B2141E)
|
||||||
|
#define SID_INT_N_NOT_USED2 ((unsigned char *)0x00B2141F)
|
||||||
|
|
||||||
|
#endif
|
|
@ -5,22 +5,44 @@
|
||||||
#ifndef __ERRORS_H
|
#ifndef __ERRORS_H
|
||||||
#define __ERRORS_H
|
#define __ERRORS_H
|
||||||
|
|
||||||
#define MAX_ERROR_NUMBER 16 // Largest (absolute value) of the error number
|
// #define MAX_ERROR_NUMBER 16 // Largest (absolute value) of the error number
|
||||||
|
|
||||||
|
#define ERR_GENERAL -1 // A general error condition
|
||||||
|
#define DEV_ERR_BADDEV -2 // Device number is bad (too big or no device assigned)
|
||||||
|
#define DEV_TIMEOUT -3 // The block device function timed out
|
||||||
|
#define DEV_CANNOT_INIT -4 // The block device could not initilize
|
||||||
|
#define DEV_CANNOT_READ -5 // The device cannot complete the READ
|
||||||
|
#define DEV_CANNOT_WRITE -6 // The device cannot complete the WRITE
|
||||||
|
#define DEV_BOUNDS_ERR -7 // The buffer provided is not big enough
|
||||||
|
#define DEV_NOMEDIA -8 // There is no media present for that device
|
||||||
|
#define DEV_WRITEPROT -9 // The media is write protected
|
||||||
|
#define ERR_BADCHANNEL -10 // The channel number was bad
|
||||||
|
#define ERR_OUT_OF_HANDLES -11 // There are no available handles for channels files etc.
|
||||||
|
#define ERR_BAD_HANDLE -12 // The handle passed was not valid
|
||||||
|
#define ERR_BAD_EXTENSION -13 // The path to load did not have an extension that matched registered loaders
|
||||||
|
#define ERR_OUT_OF_MEMORY -14 // Unable to allocate more memory
|
||||||
|
#define ERR_BAD_BINARY -15 // Bad binary file format... i.e. binary format does not match expectations
|
||||||
|
#define ERR_NOT_EXECUTABLE -16 // Binary file format does not have a starting address
|
||||||
|
#define ERR_NOT_FOUND -17 // Resource not found
|
||||||
|
|
||||||
|
#define FSYS_ERR_DISK_ERR -18 /* (1) A hard error occurred in the low level disk I/O layer */
|
||||||
|
#define FSYS_ERR_INT_ERR -19 /* (2) Assertion failed */
|
||||||
|
#define FSYS_ERR_NOT_READY -20 /* (3) The physical drive cannot work */
|
||||||
|
#define FSYS_ERR_NO_FILE -21 /* (4) Could not find the file */
|
||||||
|
#define FSYS_ERR_NO_PATH -22 /* (5) Could not find the path */
|
||||||
|
#define FSYS_ERR_INVALID_NAME -23 /* (6) The path name format is invalid */
|
||||||
|
#define FSYS_ERR_DENIED -24 /* (7) Access denied due to prohibited access or directory full */
|
||||||
|
#define FSYS_ERR_EXIST -25 /* (8) Access denied due to prohibited access */
|
||||||
|
#define FSYS_ERR_INVALID_OBJECT -26 /* (9) The file/directory object is invalid */
|
||||||
|
#define FSYS_ERR_WRITE_PROTECTED -27 /* (10) The physical drive is write protected */
|
||||||
|
#define FSYS_ERR_INVALID_DRIVE -28 /* (11) The logical drive number is invalid */
|
||||||
|
#define FSYS_ERR_NOT_ENABLED -29 /* (12) The volume has no work area */
|
||||||
|
#define FSYS_ERR_NO_FILESYSTEM -30 /* (13) There is no valid FAT volume */
|
||||||
|
#define FSYS_ERR_MKFS_ABORTED -31 /* (14) The f_mkfs() aborted due to any problem */
|
||||||
|
#define FSYS_ERR_TIMEOUT -32 /* (15) Could not get a grant to access the volume within defined period */
|
||||||
|
#define FSYS_ERR_LOCKED -33 /* (16) The operation is rejected according to the file sharing policy */
|
||||||
|
#define FSYS_ERR_NOT_ENOUGH_CORE -34 /* (17) LFN working buffer could not be allocated */
|
||||||
|
#define FSYS_ERR_TOO_MANY_OPEN_FILES -35 /* (18) Number of open files > FF_FS_LOCK */
|
||||||
|
#define FSYS_ERR_INVALID_PARAMETER -36 /* (19) Given parameter is invalid */
|
||||||
|
|
||||||
#define ERR_GENERAL -1 // A general error condition
|
|
||||||
#define DEV_ERR_BADDEV -2 // Device number is bad (too big or no device assigned)
|
|
||||||
#define DEV_TIMEOUT -3 // The block device function timed out
|
|
||||||
#define DEV_CANNOT_INIT -4 // The block device could not initilize
|
|
||||||
#define DEV_CANNOT_READ -5 // The device cannot complete the READ
|
|
||||||
#define DEV_CANNOT_WRITE -6 // The device cannot complete the WRITE
|
|
||||||
#define DEV_BOUNDS_ERR -7 // The buffer provided is not big enough
|
|
||||||
#define DEV_NOMEDIA -8 // There is no media present for that device
|
|
||||||
#define DEV_WRITEPROT -9 // The media is write protected
|
|
||||||
#define ERR_BADCHANNEL -10 // The channel number was bad
|
|
||||||
#define ERR_OUT_OF_HANDLES -11 // There are no available handles for channels, files, etc.
|
|
||||||
#define ERR_BAD_HANDLE -12 // The handle passed was not valid
|
|
||||||
#define ERR_BAD_EXTENSION -13 // The path to load did not have an extension that matched registered loaders
|
|
||||||
#define ERR_OUT_OF_MEMORY -14 // Unable to allocate more memory
|
|
||||||
#define ERR_BAD_BINARY -15 // Bad binary file format... i.e. binary format does not match expectations
|
|
||||||
#define ERR_NOT_EXECUTABLE -16 // Binary file format does not have a starting address
|
|
||||||
#endif
|
#endif
|
||||||
|
|
47
src/include/fdc_reg.h
Normal file
47
src/include/fdc_reg.h
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
/*
|
||||||
|
* Define the locations of all the FDC registers
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __FDC_REG_H
|
||||||
|
#define __FDC_REG_H
|
||||||
|
|
||||||
|
#include "sys_general.h"
|
||||||
|
|
||||||
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
|
#include "A2560K/fdc_a2560k.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Read/Write - Digital Output Register */
|
||||||
|
|
||||||
|
#define FDC_DOR_DSEL0 0x01 /* Drive 0 Select */
|
||||||
|
#define FDC_DOR_DSEL1 0x02 /* Drive 1 Select */
|
||||||
|
#define FDC_DOR_NRESET 0x04 /* Reset the FDC */
|
||||||
|
#define FDC_DOR_DMAEN 0x08 /* Enable DMA */
|
||||||
|
#define FDC_DOR_MOT0 0x10 /* Turn on motor 0 */
|
||||||
|
#define FDC_DOR_MOT1 0x20 /* Turn on motor 1 */
|
||||||
|
#define FDC_DOR_MOT2 0x40 /* Turn on motor 2 */
|
||||||
|
#define FDC_DOR_MOT3 0x80 /* Turn on motor 3 */
|
||||||
|
|
||||||
|
/* Read - Main Status Register */
|
||||||
|
#define FDC_MSR_DRV0BSY 0x01 /* Indicates if drive 0 is busy */
|
||||||
|
#define FDC_MSR_DRV1BSY 0x02 /* Indicates if drive 1 is busy */
|
||||||
|
#define FDC_MSR_CMDBSY 0x10 /* Indicates if a command is in progress */
|
||||||
|
#define FDC_MSR_NONDMA 0x20
|
||||||
|
#define FDC_MSR_DIO 0x40 /* Data direction: 1 = read, 0 = write */
|
||||||
|
#define FDC_MSR_RQM 0x80 /* 1 = host can transfer data, 0 = host must wait */
|
||||||
|
|
||||||
|
/* Write - Data Select Register
|
||||||
|
* Bit[0..1] = data rate
|
||||||
|
* Bit[2..4] = precompensation select
|
||||||
|
*/
|
||||||
|
#define FDC_DSR_LOPWR 0x40 /* Turn on low power mode */
|
||||||
|
#define FDC_DSR_RESET 0x80 /* Software reset of the FDC */
|
||||||
|
|
||||||
|
/* Read - Digital Input Register */
|
||||||
|
#define FDC_DIR_DSKCHG 0x80 /* Indicates if the disk has changed */
|
||||||
|
|
||||||
|
/* Write - Configuration Control Register
|
||||||
|
* Bit[0..1] = Data rate
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif
|
|
@ -5,11 +5,14 @@
|
||||||
#ifndef __GABE_REG_H
|
#ifndef __GABE_REG_H
|
||||||
#define __GABE_REG_H
|
#define __GABE_REG_H
|
||||||
|
|
||||||
|
#include "sys_general.h"
|
||||||
|
|
||||||
#define POWER_ON_LED 0x0001
|
#define POWER_ON_LED 0x0001
|
||||||
#define SDCARD_LED 0x0002
|
#define SDCARD_LED 0x0002
|
||||||
#define BUZZER_CONTROL 0x0004
|
#define BUZZER_CONTROL 0x0004
|
||||||
#define MANUAL_RESET 0x8000 // Make sure the word "DEAD" is written in GABE_RESET_ID
|
#define MANUAL_RESET 0x8000 // Make sure the word "DEAD" is written in GABE_RESET_ID
|
||||||
|
|
||||||
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
#define GABE_CTRL_REG ((volatile unsigned short *)0x00C00000)
|
#define GABE_CTRL_REG ((volatile unsigned short *)0x00C00000)
|
||||||
#define GABE_RESET_ID ((volatile unsigned short *)0x00C00002)
|
#define GABE_RESET_ID ((volatile unsigned short *)0x00C00002)
|
||||||
#define GABE_LFSR_REG0 ((volatile unsigned short *)0x00C00004)
|
#define GABE_LFSR_REG0 ((volatile unsigned short *)0x00C00004)
|
||||||
|
@ -26,11 +29,15 @@
|
||||||
#define GABE_CHIP_VERSION ((volatile unsigned short *)0x00C00010)
|
#define GABE_CHIP_VERSION ((volatile unsigned short *)0x00C00010)
|
||||||
#define GABE_CHIP_NUMBER ((volatile unsigned short *)0x00C00012)
|
#define GABE_CHIP_NUMBER ((volatile unsigned short *)0x00C00012)
|
||||||
|
|
||||||
|
#define GABE_DIP_REG ((volatile unsigned short *)0x00C00518)
|
||||||
|
#define GABE_DIP_BOOT_MASK 0x0003 /* Mask for the boot mode: */
|
||||||
|
#define GABE_DIP_USER_MASK 0x0300 /* Mask for the user switches: */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 16-bit register controlling the key of the A2560K built-in keyboard
|
* 16-bit register controlling the key of the A2560K built-in keyboard
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define GABE_MO_LEDS ((volatile unsigned short *)0x00C00006)
|
#define GABE_MO_LEDS ((volatile unsigned short *)0x00C0000C)
|
||||||
#define GABE_MO_LED_0_B 0x0001 /* LED 0 (Close to DEL key) -- Blue ON */
|
#define GABE_MO_LED_0_B 0x0001 /* LED 0 (Close to DEL key) -- Blue ON */
|
||||||
#define GABE_MO_LED_0_G 0x0002 /* LED 0 (Close to DEL key) -- Green ON */
|
#define GABE_MO_LED_0_G 0x0002 /* LED 0 (Close to DEL key) -- Green ON */
|
||||||
#define GABE_MO_LED_0_R 0x0004 /* LED 0 (Close to DEL key) -- Red ON */
|
#define GABE_MO_LED_0_R 0x0004 /* LED 0 (Close to DEL key) -- Red ON */
|
||||||
|
@ -44,4 +51,42 @@
|
||||||
#define GABE_MO_LED_3_G 0x0400 /* LED 2 (caps lock, Rev C) -- Green ON */
|
#define GABE_MO_LED_3_G 0x0400 /* LED 2 (caps lock, Rev C) -- Green ON */
|
||||||
#define GABE_MO_LED_3_R 0x0800 /* LED 2 (caps lock, Rev C) -- Red ON */
|
#define GABE_MO_LED_3_R 0x0800 /* LED 2 (caps lock, Rev C) -- Red ON */
|
||||||
|
|
||||||
|
#elif MODEL == MODEL_FOENIX_A2560U || MODEL == MODEL_FOENIX_A2560U_PLUS
|
||||||
|
|
||||||
|
#define GABE_CTRL_REG ((volatile unsigned short *)0x00B00000)
|
||||||
|
#define GABE_RESET_ID ((volatile unsigned short *)0x00B00002)
|
||||||
|
#define GABE_LFSR_REG0 ((volatile unsigned short *)0x00B00004)
|
||||||
|
#define GABE_LFSR_REG1 ((volatile unsigned short *)0x00B00006)
|
||||||
|
|
||||||
|
#define RGB_LED_L ((volatile unsigned short *)0x00B00008) // Writing Only - A2560K Only - 0x__RR
|
||||||
|
#define RGB_LED_H ((volatile unsigned short *)0x00B0000A) // Writing Only - A2560K Only - 0xGGBB
|
||||||
|
|
||||||
|
#define GABE_LFSR_DATA ((volatile unsigned short *)0x00B00008) // Read Only
|
||||||
|
#define GABE_LFSR_STAT ((volatile unsigned short *)0x00B0000A) // Read Only
|
||||||
|
#define GABE_MACHINE_ID ((volatile unsigned short *)0x00B0000C) // Machine ID - Read Only
|
||||||
|
#define GABE_MACH_ID_MASK 0x0003 // 1001 = A2560U and U+
|
||||||
|
#define GABE_MEMORY_BANKS 0x00C0 // 10 = 2 MB, 11 = 4 MB
|
||||||
|
#define GABE_CPU_SPEED 0x0F00
|
||||||
|
#define GABE_CPU_ID 0xF000 // 0000 = MC68SEC000 @ 20MHz
|
||||||
|
|
||||||
|
#define FPGA_DATE_YEAR ((volatile unsigned short *)0x00B40030) // YYYY
|
||||||
|
#define FPGA_DATE_MONTHDAY ((volatile unsigned short *)0x00B40032) // MMDD
|
||||||
|
|
||||||
|
#define PCB_REV_1 ((volatile unsigned short *)0x00B40034) // Null terminated string describing the PCB
|
||||||
|
#define PCB_REV_2 ((volatile unsigned short *)0x00B40036)
|
||||||
|
|
||||||
|
#define FPGA_SUBVER ((volatile unsigned short *)0x00B40038)
|
||||||
|
#define FPGA_VER ((volatile unsigned short *)0x00B4003A)
|
||||||
|
#define FPGA_MODEL_L ((volatile unsigned short *)0x00B4003C)
|
||||||
|
#define FPGA_MODEL_H ((volatile unsigned short *)0x00B4003E)
|
||||||
|
|
||||||
|
#define GABE_CHIP_SUBREV ((volatile unsigned short *)0x00B0000E)
|
||||||
|
#define GABE_CHIP_VERSION ((volatile unsigned short *)0x00B00010)
|
||||||
|
#define GABE_CHIP_NUMBER ((volatile unsigned short *)0x00B00012)
|
||||||
|
|
||||||
|
#define GABE_DIP_REG ((volatile unsigned short *)0x00B00518)
|
||||||
|
#define GABE_DIP_BOOT_MASK 0x0003 /* Mask for the boot mode: */
|
||||||
|
#define GABE_DIP_USER_MASK 0x0300 /* Mask for the user switches: */
|
||||||
|
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -5,11 +5,15 @@
|
||||||
#ifndef __MIDI_REG_H
|
#ifndef __MIDI_REG_H
|
||||||
#define __MIDI_REG_H
|
#define __MIDI_REG_H
|
||||||
|
|
||||||
|
#include "sys_general.h"
|
||||||
|
|
||||||
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
#define MIDI_DATA ((volatile unsigned char *)0x00C02330)
|
#define MIDI_DATA ((volatile unsigned char *)0x00C02330)
|
||||||
#define MIDI_STAT ((volatile unsigned char *)0x00C02331)
|
#define MIDI_STAT ((volatile unsigned char *)0x00C02331)
|
||||||
#define MIDI_CMD ((volatile unsigned char *)0x00C02331)
|
#define MIDI_CMD ((volatile unsigned char *)0x00C02331)
|
||||||
|
|
||||||
#define MIDI_STAT_TX_BUSY 0x80
|
#define MIDI_STAT_TX_BUSY 0x80
|
||||||
#define MIDI_STAT_RX_EMPTY 0x40
|
#define MIDI_STAT_RX_EMPTY 0x40
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -6,14 +6,124 @@
|
||||||
#define __PATA_REG_H
|
#define __PATA_REG_H
|
||||||
|
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
#include "sys_general.h"
|
||||||
|
|
||||||
// #if SYSTEM == A2560K
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
// /* PATA registers for the A2560K */
|
#include "A2560K/pata_a2560k.h"
|
||||||
#include "A2560K/PATA_a2560k.h"
|
#elif MODEL == MODEL_FOENIX_A2560U || MODEL == MODEL_FOENIX_A2560U_PLUS
|
||||||
|
#include "A2560U/pata_a2560u.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
// #elif SYSTEM == C256_FMX || SYSTEM == C256_U || SYSTEM == C256_U_PLUS
|
/*
|
||||||
// /* VICKY registers for the C256 FMX, U, and U+ */
|
* Bit definitions
|
||||||
// #include "FMX/vicky_general.h"
|
*/
|
||||||
// #endif
|
|
||||||
|
#define PATA_ERR_AMNF 0x01 // Error: Address mark not found
|
||||||
|
#define PATA_ERR_TKZNF 0x02 // Error: Track 0 not found
|
||||||
|
#define PATA_ERR_ABRT 0x04 // Error: Aborted command
|
||||||
|
#define PATA_ERR_MCR 0x08 // Error: Media change request
|
||||||
|
#define PATA_ERR_IDNF 0x10 // Error: ID not found
|
||||||
|
#define PATA_ERR_MC 0x20 // Error: Media change
|
||||||
|
#define PATA_ERR_UNC 0x40 // Error: Uncorrectable data error
|
||||||
|
#define PATA_ERR_BBK 0x80 // Error: Bad block detected
|
||||||
|
|
||||||
|
#define PATA_STAT_BSY 0x80 // BSY (Busy) is set whenever the device has control of the command Block Registers.
|
||||||
|
#define PATA_STAT_DRDY 0x40 // DRDY (Device Ready) is set to indicate that the device is capable of accepting all command codes.
|
||||||
|
#define PATA_STAT_DF 0x20 // DF (Device Fault) indicates a device fault error has been detected.
|
||||||
|
#define PATA_STAT_DSC 0x10 // DSC (Device Seek Complete) indicates that the device heads are settled over a track.
|
||||||
|
#define PATA_STAT_DRQ 0x08 // DRQ (Data Request) indicates that the device is ready to transfer a unsigned short or char of data between
|
||||||
|
// the host and the device.
|
||||||
|
#define PATA_STAT_CORR 0x04 // CORR (Corrected Data) is used to indicate a correctable data error.
|
||||||
|
#define PATA_STAT_IDX 0x02 // Vendor specific bit
|
||||||
|
#define PATA_STAT_ERR 0x01 // ERR (Error) indicates that an error occurred during execution of the previous command.
|
||||||
|
|
||||||
|
#define PATA_CMD_INIT 0x00
|
||||||
|
#define PATA_CMD_READ_SECTOR 0x20
|
||||||
|
#define PATA_CMD_WRITE_SECTOR 0x30
|
||||||
|
#define PATA_CMD_IDENTITY 0xEC
|
||||||
|
|
||||||
|
/*
|
||||||
|
* - BSY (Busy) is set whenever the device has control of the command
|
||||||
|
* Block Registers. When the BSY bit is equal to one, a write to a
|
||||||
|
* command block register by the host shall be ignored by the
|
||||||
|
* device.
|
||||||
|
*
|
||||||
|
* The device shall not change the state of the DRQ bit unless the
|
||||||
|
* BSY bit is equal to one. When the last block of a PIO data in
|
||||||
|
* command has been transferred by the host, then the DRQ bit is
|
||||||
|
* cleared without the BSY bit being set.
|
||||||
|
*
|
||||||
|
* When the BSY bit equals zero, the device may only change the IDX,
|
||||||
|
* DRDY, DF, DSC, and CORR bits in the Status register and the Data
|
||||||
|
* register. None of the other command block registers nor other
|
||||||
|
* bits within the Status register shall be changed by the device.
|
||||||
|
*
|
||||||
|
* NOTE - BIOSs and software device drivers that sample status as
|
||||||
|
* soon as the BSY bit is cleared to zero may not detect the
|
||||||
|
* assertion of the CORR bit by the device. After the host has
|
||||||
|
* written the Command register either the BSY bit shall be set, or
|
||||||
|
* if the BSY bit is cleared, the DRQ bit shall be set, until
|
||||||
|
* command completion.
|
||||||
|
*
|
||||||
|
* NOTE - The BSY bit is set and then cleared so quickly, that host
|
||||||
|
* detection of the BSY bit being set is not certain.
|
||||||
|
*
|
||||||
|
* The BSY bit shall be set by the device under the following
|
||||||
|
* circumstances:
|
||||||
|
* a) within 400 ns after either the negation of RESET- or the
|
||||||
|
* setting of the SRST bit in the Device Control register;
|
||||||
|
* b) within 400 ns after writing the Command register if the DRQ
|
||||||
|
* bit is not set;
|
||||||
|
* c) between blocks of a data transfer during PIO data in
|
||||||
|
* commands if the DRQ bit is not set;
|
||||||
|
* d) after the transfer of a data block during PIO data out
|
||||||
|
* commands if the DRQ bit is not set;
|
||||||
|
* e) during the data transfer of DMA commands if the DRQ bit is
|
||||||
|
* not set.
|
||||||
|
*
|
||||||
|
* The device shall not set the BSY bit at any other time.
|
||||||
|
*
|
||||||
|
* - DRDY (Device Ready) is set to indicate that the device is capable
|
||||||
|
* of accepting all command codes. This bit shall be cleared at
|
||||||
|
* power on. Devices that implement the power management features
|
||||||
|
* shall maintain the DRDY bit equal to one when they are in the
|
||||||
|
* Idle or Standby power modes. When the state of the DRDY bit
|
||||||
|
* changes, it shall not change again until after the host reads the
|
||||||
|
* status register.
|
||||||
|
*
|
||||||
|
* When the DRDY bit is equal to zero, a device responds as follows:
|
||||||
|
* a) the device shall accept and attempt to execute the EXECUTE
|
||||||
|
* DEVICE DIAGNOSTIC and INITIALIZE DEVICE PARAMETERS commands;
|
||||||
|
* b) If a device accepts commands other than EXECUTE DEVICE
|
||||||
|
* DIAGNOSTIC and INITIALIZE DEVICE PARAMETERS during the time the
|
||||||
|
* DRDY bit is equal to zero, the results are vendor specific.
|
||||||
|
*
|
||||||
|
* - DF (Device Fault) indicates a device fault error has been
|
||||||
|
* detected. The internal status or internal conditions that causes
|
||||||
|
* this error to be indicated is vendor specific.
|
||||||
|
*
|
||||||
|
* - DSC (Device Seek Complete) indicates that the device heads are
|
||||||
|
* settled over a track. When an error occurs, this bit shall not be
|
||||||
|
* changed until the Status register is read by the host, at which
|
||||||
|
* time the bit again indicates the current Seek Complete status.
|
||||||
|
*
|
||||||
|
* - DRQ (Data Request) indicates that the device is ready to transfer
|
||||||
|
* a unsigned short or char of data between the host and the device.
|
||||||
|
*
|
||||||
|
* - CORR (Corrected Data) is used to indicate a correctable data
|
||||||
|
* error. The definition of what constitutes a correctable error is
|
||||||
|
* vendor specific. This condition does not terminate a data
|
||||||
|
* transfer.
|
||||||
|
*
|
||||||
|
* - IDX (Index) is vendor specific.
|
||||||
|
*
|
||||||
|
* - ERR (Error) indicates that an error occurred during execution of
|
||||||
|
* the previous command. The bits in the Error register have
|
||||||
|
* additional information regarding the cause of the error. Once the
|
||||||
|
* device has set the error bit, the device shall not change the
|
||||||
|
* contents of the following items until a new command has been
|
||||||
|
* accepted, the SRST bit is set to one, or RESET- is asserted: the
|
||||||
|
* ERR bit in the Status register.
|
||||||
|
*/
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -8,6 +8,12 @@
|
||||||
|
|
||||||
#include "sys_general.h"
|
#include "sys_general.h"
|
||||||
|
|
||||||
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
|
#include "A2560K/ps2_a2560k.h"
|
||||||
|
#elif MODEL == MODEL_FOENIX_A2560U || MODEL == MODEL_FOENIX_A2560U_PLUS
|
||||||
|
#include "A2560U/ps2_a2560u.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Status flags
|
* Status flags
|
||||||
*/
|
*/
|
||||||
|
@ -54,26 +60,4 @@
|
||||||
#define MOUSE_CMD_DEFAULTS 0xF6 /* Mouse command: set defaults */
|
#define MOUSE_CMD_DEFAULTS 0xF6 /* Mouse command: set defaults */
|
||||||
#define MOUSE_CMD_RESET 0xFF /* Mouse command: reset the mouse */
|
#define MOUSE_CMD_RESET 0xFF /* Mouse command: reset the mouse */
|
||||||
|
|
||||||
// #if SYSTEM == SYS_FOENIX_U || SYSTEM == SYS_FOENIX_U_PLUS
|
|
||||||
// #define PS2_STATUS ((unsigned char *)0xAF1807)
|
|
||||||
// #define PS2_CMD_BUF ((unsigned char *)0xAF1807)
|
|
||||||
// #define PS2_OUT_BUF ((unsigned char *)0xAF1803)
|
|
||||||
// #define PS2_INPT_BUF ((unsigned char *)0xAF1803)
|
|
||||||
// #define PS2_DATA_BUF ((unsigned char *)0xAF1803)
|
|
||||||
//
|
|
||||||
// #elif SYSTEM == SYS_FOENIX_FMX
|
|
||||||
// #define PS2_STATUS ((unsigned char *)0xAF1064)
|
|
||||||
// #define PS2_CMD_BUF ((unsigned char *)0xAF1064)
|
|
||||||
// #define PS2_OUT_BUF ((unsigned char *)0xAF1060)
|
|
||||||
// #define PS2_INPT_BUF ((unsigned char *)0xAF1060)
|
|
||||||
// #define PS2_DATA_BUF ((unsigned char *)0xAF1060)
|
|
||||||
//
|
|
||||||
// #elif SYSTEM == SYS_FOENIX_A2560K
|
|
||||||
#define PS2_STATUS ((unsigned char *)0x00C02064)
|
|
||||||
#define PS2_CMD_BUF ((unsigned char *)0x00C02064)
|
|
||||||
#define PS2_OUT_BUF ((unsigned char *)0x00C02060)
|
|
||||||
#define PS2_INPT_BUF ((unsigned char *)0x00C02060)
|
|
||||||
#define PS2_DATA_BUF ((unsigned char *)0x00C02060)
|
|
||||||
// #endif
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -5,8 +5,11 @@
|
||||||
#ifndef __RTC_REG_H
|
#ifndef __RTC_REG_H
|
||||||
#define __RTC_REG_H
|
#define __RTC_REG_H
|
||||||
|
|
||||||
#define RTC_BASE ((volatile unsigned char *)0x00C00080)
|
#include "sys_general.h"
|
||||||
|
|
||||||
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
|
|
||||||
|
#define RTC_BASE ((volatile unsigned char *)0x00C00080)
|
||||||
#define RTC_SEC ((volatile unsigned char *)0x00C00080)
|
#define RTC_SEC ((volatile unsigned char *)0x00C00080)
|
||||||
#define RTC_ALRM_SEC ((volatile unsigned char *)0x00C00081)
|
#define RTC_ALRM_SEC ((volatile unsigned char *)0x00C00081)
|
||||||
#define RTC_MIN ((volatile unsigned char *)0x00C00082)
|
#define RTC_MIN ((volatile unsigned char *)0x00C00082)
|
||||||
|
@ -24,10 +27,35 @@
|
||||||
#define RTC_CTRL ((volatile unsigned char *)0x00C0008E)
|
#define RTC_CTRL ((volatile unsigned char *)0x00C0008E)
|
||||||
#define RTC_CENTURY ((volatile unsigned char *)0x00C0008F)
|
#define RTC_CENTURY ((volatile unsigned char *)0x00C0008F)
|
||||||
|
|
||||||
|
#elif MODEL_FOENIX_A2560U || MODEL == MODEL_FOENIX_A2560U_PLUS
|
||||||
|
|
||||||
|
#define RTC_BASE ((volatile unsigned char *)0x00B00080)
|
||||||
|
#define RTC_SEC ((volatile unsigned char *)0x00B00080)
|
||||||
|
#define RTC_ALRM_SEC ((volatile unsigned char *)0x00B00082)
|
||||||
|
#define RTC_MIN ((volatile unsigned char *)0x00B00084)
|
||||||
|
#define RTC_ALRM_MIN ((volatile unsigned char *)0x00B00086)
|
||||||
|
#define RTC_HOUR ((volatile unsigned char *)0x00B00088)
|
||||||
|
#define RTC_ALRM_HOUR ((volatile unsigned char *)0x00B0008A)
|
||||||
|
#define RTC_DAY ((volatile unsigned char *)0x00B0008C)
|
||||||
|
#define RTC_ALRM_DAY ((volatile unsigned char *)0x00B0008E)
|
||||||
|
#define RTC_DAY_OF_WEEK ((volatile unsigned char *)0x00B00090)
|
||||||
|
#define RTC_MONTH ((volatile unsigned char *)0x00B00092)
|
||||||
|
#define RTC_YEAR ((volatile unsigned char *)0x00B00094)
|
||||||
|
#define RTC_RATES ((volatile unsigned char *)0x00B00096)
|
||||||
|
#define RTC_ENABLES ((volatile unsigned char *)0x00B00098)
|
||||||
|
#define RTC_FLAGS ((volatile unsigned char *)0x00B0009A)
|
||||||
|
#define RTC_CTRL ((volatile unsigned char *)0x00B0009C)
|
||||||
|
#define RTC_CENTURY ((volatile unsigned char *)0x00B0009E)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Rate fields and settings */
|
/* Rate fields and settings */
|
||||||
#define RTC_RATES_WD 0xf0
|
#define RTC_RATES_WD 0xf0
|
||||||
#define RTC_RATES_RS 0x0f
|
#define RTC_RATES_RS 0x0f
|
||||||
#define RTC_RATE_976us 0x06
|
#define RTC_RATE_976us 0x06
|
||||||
|
#define RTC_RATE_4ms 0x04
|
||||||
|
#define RTC_RATE_15ms 0x0A
|
||||||
|
|
||||||
|
|
||||||
/* Enable bits */
|
/* Enable bits */
|
||||||
#define RTC_AIE 0x08
|
#define RTC_AIE 0x08
|
||||||
|
|
|
@ -6,14 +6,40 @@
|
||||||
#define __SDC_REG_H
|
#define __SDC_REG_H
|
||||||
|
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
#include "sys_general.h"
|
||||||
|
|
||||||
// #if SYSTEM == A2560K
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
// /* PATA registers for the A2560K */
|
|
||||||
#include "A2560K/sdc_a2560k.h"
|
#include "A2560K/sdc_a2560k.h"
|
||||||
|
#elif MODEL == MODEL_FOENIX_A2560U || MODEL == MODEL_FOENIX_A2560U_PLUS
|
||||||
|
#include "A2560U/sdc_a2560u.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
// #elif SYSTEM == C256_FMX || SYSTEM == C256_U || SYSTEM == C256_U_PLUS
|
/*
|
||||||
// /* VICKY registers for the C256 FMX, U, and U+ */
|
* Bit definitions
|
||||||
// #include "FMX/vicky_general.h"
|
*/
|
||||||
// #endif
|
|
||||||
|
// SDC_TRANS_TYPE_REG
|
||||||
|
#define SDC_TRANS_DIRECT 0x00 // 00 = Direct Access
|
||||||
|
#define SDC_TRANS_INIT_SD 0x01 // 01 = Init SD
|
||||||
|
#define SDC_TRANS_READ_BLK 0x02 // 10 = RW_READ_BLOCK (512 Bytes)
|
||||||
|
#define SDC_TRANS_WRITE_BLK 0x03 // 11 = RW_WRITE_SD_BLOCK
|
||||||
|
|
||||||
|
// SDC_TRANS_CONTROL_REG
|
||||||
|
#define SDC_TRANS_START 0x01
|
||||||
|
// SDC_TRANS_STATUS_REG
|
||||||
|
#define SDC_TRANS_BUSY 0x01 // 1= Transaction Busy
|
||||||
|
// SDC_TRANS_ERROR_REG
|
||||||
|
#define SDC_TRANS_INIT_NO_ERR 0x00 // Init Error Report [1:0]
|
||||||
|
#define SDC_TRANS_INIT_CMD0_ERR 0x01
|
||||||
|
#define SDC_TRANS_INIT_CMD1_ERR 0x02
|
||||||
|
|
||||||
|
#define SDC_TRANS_RD_NO_ERR 0x00 // Read Error Report [3:2]
|
||||||
|
#define SDC_TRANS_RD_CMD_ERR 0x04
|
||||||
|
#define SDC_TRANS_RD_TOKEN_ERR 0x08
|
||||||
|
|
||||||
|
#define SDC_TRANS_WR_NO_ERR 0x00 // Write Report Error [5:4]
|
||||||
|
#define SDC_TRANS_WR_CMD_ERR 0x10
|
||||||
|
#define SDC_TRANS_WR_DATA_ERR 0x20
|
||||||
|
#define SDC_TRANS_WR_BUSY_ERR 0x30
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
17
src/include/sound_reg.h
Normal file
17
src/include/sound_reg.h
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
/*
|
||||||
|
* Master include file for all the sound device registers
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __SOUND_REG_H
|
||||||
|
#define __SOUND_REG_H
|
||||||
|
|
||||||
|
#include "sys_general.h"
|
||||||
|
|
||||||
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
|
#include "A2560K/sound_a2560k.h"
|
||||||
|
|
||||||
|
#elif MODEL == MODEL_FOENIX_A2560U || MODEL_FOENIX_A2560U_PLUS
|
||||||
|
#include "A2560U/sound_a2560u.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
|
@ -20,7 +20,7 @@
|
||||||
* Syscall function numbers
|
* Syscall function numbers
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Miscellaneous control calls */
|
/* Core calls */
|
||||||
|
|
||||||
#define KFN_EXIT 0x00 /* Quick the current program and return to the command line */
|
#define KFN_EXIT 0x00 /* Quick the current program and return to the command line */
|
||||||
#define KFN_WARMBOOT 0x01 /* Do a soft re-initialization */
|
#define KFN_WARMBOOT 0x01 /* Do a soft re-initialization */
|
||||||
|
@ -29,8 +29,9 @@
|
||||||
#define KFN_INT_DISABLE 0x04 /* Disable an interrupt */
|
#define KFN_INT_DISABLE 0x04 /* Disable an interrupt */
|
||||||
#define KFN_INT_ENABLE_ALL 0x05 /* Enable all interrupts */
|
#define KFN_INT_ENABLE_ALL 0x05 /* Enable all interrupts */
|
||||||
#define KFN_INT_DISABLE_ALL 0x06 /* Disable all interrupts */
|
#define KFN_INT_DISABLE_ALL 0x06 /* Disable all interrupts */
|
||||||
#define KFN_INT_CLEAR 0x05 /* Clear (acknowledge) an interrupt */
|
#define KFN_INT_CLEAR 0x07 /* Clear (acknowledge) an interrupt */
|
||||||
#define KFN_INT_PENDING 0x06 /* Return true if the interrupt is pending */
|
#define KFN_INT_PENDING 0x08 /* Return true if the interrupt is pending */
|
||||||
|
#define KFN_SYS_GET_INFO 0x09 /* Get information about the computer */
|
||||||
|
|
||||||
/* Channel system calls */
|
/* Channel system calls */
|
||||||
|
|
||||||
|
@ -44,7 +45,10 @@
|
||||||
#define KFN_CHAN_STATUS 0x17 /* Get the status of a channel */
|
#define KFN_CHAN_STATUS 0x17 /* Get the status of a channel */
|
||||||
#define KFN_CHAN_IOCTRL 0x18 /* Send a command to a channel (channel dependent functionality) */
|
#define KFN_CHAN_IOCTRL 0x18 /* Send a command to a channel (channel dependent functionality) */
|
||||||
#define KFN_CHAN_REGISTER 0x19 /* Register a channel device driver */
|
#define KFN_CHAN_REGISTER 0x19 /* Register a channel device driver */
|
||||||
#define KFN_TEXT_SETSIZES 0x1A /* Adjusts the screen size based on the current graphics mode */
|
#define KFN_CHAN_OPEN 0x1A /* Open a channel device */
|
||||||
|
#define KFN_CHAN_CLOSE 0x1B /* Close an open channel (not for files) */
|
||||||
|
#define KFN_TEXT_SETSIZES 0x1C /* Adjusts the screen size based on the current graphics mode */
|
||||||
|
|
||||||
|
|
||||||
/* Block device system calls */
|
/* Block device system calls */
|
||||||
|
|
||||||
|
@ -68,17 +72,24 @@
|
||||||
#define KFN_RENAME 0x38 /* Rename a file */
|
#define KFN_RENAME 0x38 /* Rename a file */
|
||||||
#define KFN_MKDIR 0x39 /* Create a directory */
|
#define KFN_MKDIR 0x39 /* Create a directory */
|
||||||
#define KFN_LOAD 0x3A /* Load a file into memory */
|
#define KFN_LOAD 0x3A /* Load a file into memory */
|
||||||
#define KFN_SAVE 0x3B /* Save a block of memory to a file */
|
#define KFN_GET_LABEL 0x3B /* Read the label of a volume */
|
||||||
#define KFN_RUN 0x3C /* Load an execute a binary file */
|
#define KFN_SET_LABEL 0x3C /* Set the label of a volume */
|
||||||
#define KFN_LOAD_REGISTER 0x3D /* Register a file type handler for executable binaries */
|
#define KFN_SET_CWD 0x3D /* Set the current working directory */
|
||||||
|
#define KFN_GET_CWD 0x3E /* Get the current working directory */
|
||||||
|
#define KFN_LOAD_REGISTER 0x3F /* Register a file type handler for executable binaries */
|
||||||
|
|
||||||
/* Timer calls */
|
/* Process and memory calls */
|
||||||
|
|
||||||
#define KFN_DELAY 0x40 /* Block for a certain amount of time */
|
#define KFN_RUN 0x40 /* Load an execute a binary file */
|
||||||
#define KFN_SET_ALARM 0x41 /* Set an alarm for a certain amount of time */
|
|
||||||
#define KFN_GET_TIMECODE 0x42 /* Gets the current time code (increments since boot) */
|
/* Misc calls */
|
||||||
#define KFN_SET_DATETIME 0x43 /* Set the real time clock date-time */
|
|
||||||
#define KFN_GET_DATETIME 0x44 /* Get the real time clock date-time */
|
#define KFN_TIME_JIFFIES 0x50 /* Gets the current time code (increments since boot) */
|
||||||
|
#define KFN_TIME_SETRTC 0x51 /* Set the real time clock date-time */
|
||||||
|
#define KFN_TIME_GETRTC 0x52 /* Get the real time clock date-time */
|
||||||
|
#define KFN_KBD_SCANCODE 0x53 /* Get the next scan code from the keyboard */
|
||||||
|
#define KFN_KBD_LAYOUT 0x54 /* Set the translation tables for the keyboard */
|
||||||
|
#define KFN_ERR_MESSAGE 0x55 /* Return an error description, given an error number */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Call into the kernel (provided by assembly)
|
* Call into the kernel (provided by assembly)
|
||||||
|
@ -154,6 +165,14 @@ extern p_int_handler sys_int_register(unsigned short n, p_int_handler handler);
|
||||||
*/
|
*/
|
||||||
extern short sys_int_pending(unsigned short n);
|
extern short sys_int_pending(unsigned short n);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Acknowledge an interrupt (clear out its pending flag)
|
* Acknowledge an interrupt (clear out its pending flag)
|
||||||
*
|
*
|
||||||
|
@ -276,6 +295,30 @@ extern short sys_chan_seek(short channel, long position, short base);
|
||||||
*/
|
*/
|
||||||
extern short sys_chan_ioctrl(short channel, short command, uint8_t * buffer, short size);
|
extern short sys_chan_ioctrl(short channel, short command, uint8_t * buffer, short size);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Open a channel
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* dev = the device number to have a channel opened
|
||||||
|
* path = a "path" describing how the device is to be open
|
||||||
|
* mode = is the device to be read, written, both? (0x01 = READ flag, 0x02 = WRITE flag, 0x03 = READ and WRITE)
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* the number of the channel opened, negative number on error
|
||||||
|
*/
|
||||||
|
extern short sys_chan_open(short dev, uint8_t * path, short mode);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Close a channel
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* chan = the number of the channel to close
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* nothing useful
|
||||||
|
*/
|
||||||
|
extern short sys_chan_close(short chan);
|
||||||
|
|
||||||
/***
|
/***
|
||||||
*** Block device system calls
|
*** Block device system calls
|
||||||
***/
|
***/
|
||||||
|
@ -349,4 +392,286 @@ extern short sys_bdev_flush(short dev);
|
||||||
//
|
//
|
||||||
extern short sys_bdev_ioctrl(short dev, short command, unsigned char * buffer, short size);
|
extern short sys_bdev_ioctrl(short dev, short command, unsigned char * buffer, short size);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* File System Calls
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attempt to open a file given the path to the file and the mode.
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* path = the ASCIIZ string containing the path to the file.
|
||||||
|
* mode = the mode (e.g. r/w/create)
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* the channel ID for the open file (negative if error)
|
||||||
|
*/
|
||||||
|
extern short sys_fsys_open(const char * path, short mode);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Close access to a previously open file.
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* fd = the channel ID for the file
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, negative number on failure
|
||||||
|
*/
|
||||||
|
extern short sys_fsys_close(short fd);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attempt to open a directory for scanning
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* path = the path to the directory to open
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* the handle to the directory if >= 0. An error if < 0
|
||||||
|
*/
|
||||||
|
extern short sys_fsys_opendir(const char * path);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Close access to a previously open file.
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* fd = the channel ID for the file
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, negative number on failure
|
||||||
|
*/
|
||||||
|
extern short sys_fsys_close(short fd);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attempt to open a directory for scanning
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* path = the path to the directory to open
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* the handle to the directory if >= 0. An error if < 0
|
||||||
|
*/
|
||||||
|
extern short sys_fsys_opendir(const char * path);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Close a previously open directory
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* dir = the directory handle to close
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, negative number on error
|
||||||
|
*/
|
||||||
|
extern short sys_fsys_closedir(short dir);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attempt to read an entry from an open directory
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* dir = the handle of the open directory
|
||||||
|
* file = pointer to the t_file_info structure to fill out.
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, negative number on failure
|
||||||
|
*/
|
||||||
|
extern short sys_fsys_readdir(short dir, p_file_info file);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Open a directory given the path and search for the first file matching the pattern.
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* path = the path to the directory to search
|
||||||
|
* pattern = the file name pattern to search for
|
||||||
|
* file = pointer to the t_file_info structure to fill out
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* the directory handle to use for subsequent calls if >= 0, error if negative
|
||||||
|
*/
|
||||||
|
extern short sys_fsys_findfirst(const char * path, const char * pattern, p_file_info file);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Open a directory given the path and search for the first file matching the pattern.
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* dir = the handle to the directory (returned by fsys_findfirst) to search
|
||||||
|
* file = pointer to the t_file_info structure to fill out
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, error if negative
|
||||||
|
*/
|
||||||
|
extern short sys_fsys_findnext(short dir, p_file_info file);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get the label for the drive holding the path
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* path = path to the drive
|
||||||
|
* label = buffer that will hold the label... should be at least 35 bytes
|
||||||
|
*/
|
||||||
|
extern short sys_fsys_get_label(const char * path, char * label);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set the label for the drive holding the path
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* drive = drive number
|
||||||
|
* label = buffer that holds the label
|
||||||
|
*/
|
||||||
|
extern short sys_fsys_set_label(short drive, const char * label);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a directory
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* path = the path of the directory to create.
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, negative number on failure.
|
||||||
|
*/
|
||||||
|
extern short sys_fsys_mkdir(const char * path);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete a file or directory
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* path = the path of the file or directory to delete.
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, negative number on failure.
|
||||||
|
*/
|
||||||
|
extern short sys_fsys_delete(const char * path);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rename a file or directory
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* old_path = the current path to the file
|
||||||
|
* new_path = the new path for the file
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, negative number on failure.
|
||||||
|
*/
|
||||||
|
extern short sys_fsys_rename(const char * old_path, const char * new_path);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Change the current working directory (and drive)
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* path = the path that should be the new current
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, negative number on failure.
|
||||||
|
*/
|
||||||
|
extern short sys_fsys_setcwd(const char * path);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the current working drive and directory
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* path = the buffer in which to store the directory
|
||||||
|
* size = the size of the buffer in bytes
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, negative number on failure.
|
||||||
|
*/
|
||||||
|
extern short sys_fsys_getcwd(char * path, short size);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Load a file into memory at the designated destination address.
|
||||||
|
*
|
||||||
|
* If destination = 0, the file must be in a recognized binary format
|
||||||
|
* that specifies its own loading address.
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* path = the path to the file to load
|
||||||
|
* destination = the destination address (0 for use file's address)
|
||||||
|
* start = pointer to the long variable to fill with the starting address
|
||||||
|
* (0 if not an executable, any other number if file is executable
|
||||||
|
* with a known starting address)
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, negative number on error
|
||||||
|
*/
|
||||||
|
extern short sys_fsys_load(const char * path, long destination, long * start);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Register a file loading routine
|
||||||
|
*
|
||||||
|
* A file loader, takes a channel number to load from and returns a
|
||||||
|
* short that is the status of the load.
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* extension = the file extension to map to
|
||||||
|
* loader = pointer to the file load routine to add
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* 0 on success, negative number on error
|
||||||
|
*/
|
||||||
|
extern short sys_fsys_register_loader(const char * extension, p_file_loader loader);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Miscellaneous
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get the number of jiffies since the system last booted.
|
||||||
|
*
|
||||||
|
* NOTE: a jiffie is 1/60 of a second. This timer will not be
|
||||||
|
* 100% precise, so it should be used for timeout purposes
|
||||||
|
* where precision is not critical.
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* the number of jiffies since the last reset
|
||||||
|
*/
|
||||||
|
extern long sys_time_jiffies();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set the time on the RTC
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* time = pointer to a t_time record containing the correct time
|
||||||
|
*/
|
||||||
|
extern void sys_rtc_set_time(p_time time);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get the time on the RTC
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* time = pointer to a t_time record in which to put the current time
|
||||||
|
*/
|
||||||
|
extern void sys_rtc_get_time(p_time time);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return the next scan code from the keyboard... 0 if nothing pending
|
||||||
|
*/
|
||||||
|
extern unsigned short sys_kbd_scancode();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return an error message given an error number
|
||||||
|
*/
|
||||||
|
extern const char * sys_err_message(short err_number);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set the keyboard translation tables
|
||||||
|
*
|
||||||
|
* The translation tables provided to the keyboard consist of eight
|
||||||
|
* consecutive tables of 128 characters each. Each table maps from
|
||||||
|
* the MAKE scan code of a key to its appropriate 8-bit character code.
|
||||||
|
*
|
||||||
|
* The tables included must include, in order:
|
||||||
|
* - UNMODIFIED: Used when no modifier keys are pressed or active
|
||||||
|
* - SHIFT: Used when the SHIFT modifier is pressed
|
||||||
|
* - CTRL: Used when the CTRL modifier is pressed
|
||||||
|
* - CTRL-SHIFT: Used when both CTRL and SHIFT are pressed
|
||||||
|
* - CAPSLOCK: Used when CAPSLOCK is down but SHIFT is not pressed
|
||||||
|
* - CAPSLOCK-SHIFT: Used when CAPSLOCK is down and SHIFT is pressed
|
||||||
|
* - ALT: Used when only ALT is presse
|
||||||
|
* - ALT-SHIFT: Used when ALT is pressed and either CAPSLOCK is down
|
||||||
|
* or SHIFT is pressed (but not both)
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* tables = pointer to the keyboard translation tables
|
||||||
|
*/
|
||||||
|
extern short sys_kbd_layout(const char * tables);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -5,10 +5,22 @@
|
||||||
#ifndef __UART_REG_H
|
#ifndef __UART_REG_H
|
||||||
#define __UART_REG_H
|
#define __UART_REG_H
|
||||||
|
|
||||||
|
#include "sys_general.h"
|
||||||
|
|
||||||
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
#define UART1_BASE 0x00C023F8 /* Base address for UART 1 (COM1) */
|
#define UART1_BASE 0x00C023F8 /* Base address for UART 1 (COM1) */
|
||||||
#define UART2_BASE 0x00C022F8 /* Base address for UART 2 (COM2) */
|
#define UART2_BASE 0x00C022F8 /* Base address for UART 2 (COM2) */
|
||||||
|
|
||||||
// Register Offsets
|
#elif MODEL == MODEL_FOENIX_A2560U || MODEL == MODEL_FOENIX_A2560U_PLUS
|
||||||
|
#define UART1_BASE 0x00B028F8 /* Base address for UART 1 (COM1) */
|
||||||
|
#define UART2_BASE 0x00B028F9 /* Base address for UART 2 (COM2) */
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Register Offsets
|
||||||
|
*/
|
||||||
|
|
||||||
#define UART_TRHB 0x00 /* Transmit/Receive Hold Buffer */
|
#define UART_TRHB 0x00 /* Transmit/Receive Hold Buffer */
|
||||||
#define UART_DLL UART_TRHB /* Divisor Latch Low Byte */
|
#define UART_DLL UART_TRHB /* Divisor Latch Low Byte */
|
||||||
#define UART_DLH 0x01 /* Divisor Latch High Byte */
|
#define UART_DLH 0x01 /* Divisor Latch High Byte */
|
||||||
|
@ -67,6 +79,20 @@
|
||||||
#define LSR_ERR_OVERRUN 0x02 /* Overrun error */
|
#define LSR_ERR_OVERRUN 0x02 /* Overrun error */
|
||||||
#define LSR_DATA_AVAIL 0x01 /* Data is ready in the receive buffer */
|
#define LSR_DATA_AVAIL 0x01 /* Data is ready in the receive buffer */
|
||||||
|
|
||||||
|
#if MODEL == MODEL_FOENIX_A2560U || MODEL == MODEL_FOENIX_A2560U_PLUS
|
||||||
|
|
||||||
|
#define UART_300 4167 /* Code for 300 bps */
|
||||||
|
#define UART_1200 1042 /* Code for 1200 bps */
|
||||||
|
#define UART_2400 521 /* Code for 2400 bps */
|
||||||
|
#define UART_4800 260 /* Code for 4800 bps */
|
||||||
|
#define UART_9600 130 /* Code for 9600 bps */
|
||||||
|
#define UART_19200 65 /* Code for 19200 bps */
|
||||||
|
#define UART_38400 33 /* Code for 28400 bps */
|
||||||
|
#define UART_57600 22 /* Code for 57600 bps */
|
||||||
|
#define UART_115200 11 /* Code for 115200 bps */
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
#define UART_300 384 /* Code for 300 bps */
|
#define UART_300 384 /* Code for 300 bps */
|
||||||
#define UART_1200 96 /* Code for 1200 bps */
|
#define UART_1200 96 /* Code for 1200 bps */
|
||||||
#define UART_2400 48 /* Code for 2400 bps */
|
#define UART_2400 48 /* Code for 2400 bps */
|
||||||
|
@ -78,3 +104,7 @@
|
||||||
#define UART_115200 1 /* Code for 115200 bps */
|
#define UART_115200 1 /* Code for 115200 bps */
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -6,14 +6,13 @@
|
||||||
#define __vicky_general_h
|
#define __vicky_general_h
|
||||||
|
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
#include "sys_general.h"
|
||||||
|
|
||||||
// #if SYSTEM == A2560K
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
// /* VICKY registers for the A2560K */
|
#include "A2560K/VICKYIII_a2560k.h"
|
||||||
#include "A2560K/VICKYIII_General.h"
|
#elif MODEL == MODEL_FOENIX_A2560U || MODEL == MODEL_FOENIX_A2560U_PLUS
|
||||||
|
#include "A2560U/VICKYIII_a2560u.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
// #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
|
#endif
|
||||||
|
|
130
src/indicators.c
Normal file
130
src/indicators.c
Normal file
|
@ -0,0 +1,130 @@
|
||||||
|
/*
|
||||||
|
* System independent routines for controlling the built in indicator LEDs
|
||||||
|
*
|
||||||
|
* Indicators on the C256 and most of the A2560 lines of computers will be built in to
|
||||||
|
* the board and contolled by GABE. They will usually be simple off-on indicators.
|
||||||
|
*
|
||||||
|
* On the A2560K, the indicators are RGB LEDs on the keyboard or build into the machine.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gabe_reg.h"
|
||||||
|
#include "indicators.h"
|
||||||
|
#include "sys_general.h"
|
||||||
|
|
||||||
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
|
#include "dev/kbd_mo.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initialize the indicators
|
||||||
|
*
|
||||||
|
* Generally, this means the indicators will all be turned off
|
||||||
|
*/
|
||||||
|
void ind_init() {
|
||||||
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
|
/* The keyboard LEDs will be initialized by the keyboard code */
|
||||||
|
|
||||||
|
/* Turn off the power LED */
|
||||||
|
*RGB_LED_L = 0x0000;
|
||||||
|
*RGB_LED_H = 0x0000;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
|
short ind_state_color(short state) {
|
||||||
|
switch (state) {
|
||||||
|
case IND_ON:
|
||||||
|
/* Green for on */
|
||||||
|
return 0x02;
|
||||||
|
|
||||||
|
case IND_ERROR:
|
||||||
|
/* Red for error */
|
||||||
|
return 0x04;
|
||||||
|
|
||||||
|
default:
|
||||||
|
/* Anything else is off */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ind_set_power(short state) {
|
||||||
|
switch (state) {
|
||||||
|
case IND_ON:
|
||||||
|
/* Purple for on */
|
||||||
|
*RGB_LED_L = 0x00FF;
|
||||||
|
*RGB_LED_H = 0x00FF;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IND_ERROR:
|
||||||
|
/* Red for error */
|
||||||
|
*RGB_LED_L = 0x0000;
|
||||||
|
*RGB_LED_H = 0x0000;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
/* Anything else is off */
|
||||||
|
*RGB_LED_L = 0x0000;
|
||||||
|
*RGB_LED_H = 0x0000;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ind_set_fdc(short state) {
|
||||||
|
kbdmo_set_fdc_led(ind_state_color(state));
|
||||||
|
}
|
||||||
|
|
||||||
|
void ind_set_sdc(short state) {
|
||||||
|
kbdmo_set_sdc_led(ind_state_color(state));
|
||||||
|
}
|
||||||
|
|
||||||
|
void ind_set_hdc(short state) {
|
||||||
|
kbdmo_set_hdc_led(ind_state_color(state));
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
|
||||||
|
void ind_set_power(short state) {
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ind_set_fdc(short state) {
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ind_set_sdc(short state) {
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ind_set_hdc(short state) {
|
||||||
|
;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set an indicator to the given state
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* ind_number = the number of the indicator to change
|
||||||
|
* state = the state the indicator should take (on, off, error)
|
||||||
|
*/
|
||||||
|
void ind_set(short ind_number, short state) {
|
||||||
|
switch (ind_number) {
|
||||||
|
case IND_POWER:
|
||||||
|
ind_set_power(state);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IND_FDC:
|
||||||
|
ind_set_fdc(state);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IND_SDC:
|
||||||
|
ind_set_sdc(state);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case IND_HDC:
|
||||||
|
ind_set_hdc(state);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
38
src/indicators.h
Normal file
38
src/indicators.h
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
/*
|
||||||
|
* System independent routines for controlling the built in indicator LEDs
|
||||||
|
*
|
||||||
|
* Indicators on the C256 and most of the A2560 lines of computers will be built in to
|
||||||
|
* the board and contolled by GABE. They will usually be simple off-on indicators.
|
||||||
|
*
|
||||||
|
* On the A2560K, the indicators are RGB LEDs on the keyboard or build into the machine.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __INDICATORS_H
|
||||||
|
#define __INDICATORS_H
|
||||||
|
|
||||||
|
#define IND_OFF 0x00 /* The LED should be off */
|
||||||
|
#define IND_ON 0x01 /* The LED should be on for a normal condition */
|
||||||
|
#define IND_ERROR 0x02 /* The LED should be on for an error condition (if possible) */
|
||||||
|
|
||||||
|
#define IND_POWER 0x00 /* Number for the power LED */
|
||||||
|
#define IND_SDC 0x01 /* Number for the SD Card's LED */
|
||||||
|
#define IND_HDC 0x02 /* Number for the hard drive (IDE) LED */
|
||||||
|
#define IND_FDC 0x03 /* Number for the flopy drive LED */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initialize the indicators
|
||||||
|
*
|
||||||
|
* Generally, this means the indicators will all be turned off
|
||||||
|
*/
|
||||||
|
extern void ind_init();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set an indicator to the given state
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* ind_number = the number of the indicator to change
|
||||||
|
* state = the state the indicator should take (on, off, error)
|
||||||
|
*/
|
||||||
|
extern void ind_set(short ind_number, short state);
|
||||||
|
|
||||||
|
#endif
|
|
@ -157,16 +157,18 @@ void int_vicky_channel_a() {
|
||||||
unsigned short mask = 1;
|
unsigned short mask = 1;
|
||||||
unsigned short pending = *PENDING_GRP0 & 0xff;
|
unsigned short pending = *PENDING_GRP0 & 0xff;
|
||||||
|
|
||||||
|
/* Acknowledge all the pending interrupts:
|
||||||
|
* NOTE: we have to do this, even if there is no handler for the interrupt */
|
||||||
|
*PENDING_GRP0 = 0x00ff;
|
||||||
|
|
||||||
if (pending != 0) {
|
if (pending != 0) {
|
||||||
for (n = 0; n < 8; n++) {
|
for (n = 0; n < 8; n++) {
|
||||||
if (pending & mask) {
|
if (pending & mask) {
|
||||||
p_int_handler handler = g_int_handler[n];
|
p_int_handler handler = g_int_handler[n];
|
||||||
|
|
||||||
if (handler) {
|
if (handler) {
|
||||||
/* If we got a handler, call it */
|
/* If we got a handler, call it */
|
||||||
handler();
|
handler();
|
||||||
|
|
||||||
/* And acknowledge the interrupt */
|
|
||||||
int_clear(n);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -184,6 +186,10 @@ void int_vicky_channel_b() {
|
||||||
unsigned short mask = 1;
|
unsigned short mask = 1;
|
||||||
unsigned short pending = (*PENDING_GRP0 >> 8) & 0xff;
|
unsigned short pending = (*PENDING_GRP0 >> 8) & 0xff;
|
||||||
|
|
||||||
|
/* Acknowledge all the pending interrupts:
|
||||||
|
* NOTE: we have to do this, even if there is no handler for the interrupt */
|
||||||
|
*PENDING_GRP0 = 0xff00;
|
||||||
|
|
||||||
if (pending != 0) {
|
if (pending != 0) {
|
||||||
for (n = 8; n < 16; n++) {
|
for (n = 8; n < 16; n++) {
|
||||||
if (pending & mask) {
|
if (pending & mask) {
|
||||||
|
@ -191,9 +197,6 @@ void int_vicky_channel_b() {
|
||||||
if (handler) {
|
if (handler) {
|
||||||
/* If we got a handler, call it */
|
/* If we got a handler, call it */
|
||||||
handler();
|
handler();
|
||||||
|
|
||||||
/* And acknowledge the interrupt */
|
|
||||||
int_clear(n);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,8 @@
|
||||||
#ifndef __INTERRUPT_H
|
#ifndef __INTERRUPT_H
|
||||||
#define __INTERRUPT_H
|
#define __INTERRUPT_H
|
||||||
|
|
||||||
|
#include "sys_general.h"
|
||||||
|
|
||||||
/* Type declaration for an interrupt handler */
|
/* Type declaration for an interrupt handler */
|
||||||
typedef void (*p_int_handler)();
|
typedef void (*p_int_handler)();
|
||||||
|
|
||||||
|
@ -12,6 +14,8 @@ typedef void (*p_int_handler)();
|
||||||
* Interrupt control registers
|
* Interrupt control registers
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
|
|
||||||
#define PENDING_GRP0 ((volatile unsigned short *)0x00C00100)
|
#define PENDING_GRP0 ((volatile unsigned short *)0x00C00100)
|
||||||
#define PENDING_GRP1 ((volatile unsigned short *)0x00C00102)
|
#define PENDING_GRP1 ((volatile unsigned short *)0x00C00102)
|
||||||
#define PENDING_GRP2 ((volatile unsigned short *)0x00C00104)
|
#define PENDING_GRP2 ((volatile unsigned short *)0x00C00104)
|
||||||
|
@ -28,6 +32,27 @@ typedef void (*p_int_handler)();
|
||||||
#define MASK_GRP1 ((volatile unsigned short *)0x00C0011A)
|
#define MASK_GRP1 ((volatile unsigned short *)0x00C0011A)
|
||||||
#define MASK_GRP2 ((volatile unsigned short *)0x00C0011C)
|
#define MASK_GRP2 ((volatile unsigned short *)0x00C0011C)
|
||||||
|
|
||||||
|
#elif MODEL == MODEL_FOENIX_A2560U || MODEL == MODEL_FOENIX_A2560U_PLUS
|
||||||
|
|
||||||
|
#define PENDING_GRP0 ((volatile unsigned short *)0x00B00100)
|
||||||
|
#define PENDING_GRP1 ((volatile unsigned short *)0x00B00102)
|
||||||
|
#define PENDING_GRP2 ((volatile unsigned short *)0x00B00104)
|
||||||
|
|
||||||
|
#define POL_GRP0 ((volatile unsigned short *)0x00B00108)
|
||||||
|
#define POL_GRP1 ((volatile unsigned short *)0x00B0010A)
|
||||||
|
#define POL_GRP2 ((volatile unsigned short *)0x00B0010C)
|
||||||
|
|
||||||
|
#define EDGE_GRP0 ((volatile unsigned short *)0x00B00110)
|
||||||
|
#define EDGE_GRP1 ((volatile unsigned short *)0x00B00112)
|
||||||
|
#define EDGE_GRP2 ((volatile unsigned short *)0x00B00114)
|
||||||
|
|
||||||
|
#define MASK_GRP0 ((volatile unsigned short *)0x00B00118)
|
||||||
|
#define MASK_GRP1 ((volatile unsigned short *)0x00B0011A)
|
||||||
|
#define MASK_GRP2 ((volatile unsigned short *)0x00B0011C)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* For A2560K: $00C00100..$00C001FF - Interrupt Controllers
|
* For A2560K: $00C00100..$00C001FF - Interrupt Controllers
|
||||||
*/
|
*/
|
||||||
|
@ -172,15 +197,31 @@ extern void int_init();
|
||||||
* Enable all interrupts
|
* Enable all interrupts
|
||||||
*
|
*
|
||||||
* NOTE: this is actually provided in the low level assembly
|
* NOTE: this is actually provided in the low level assembly
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* a machine dependent representation of the interrupt masking prior to enabling
|
||||||
*/
|
*/
|
||||||
extern void int_enable_all();
|
extern short int_enable_all();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Disable all interrupts
|
* Disable all interrupts
|
||||||
*
|
*
|
||||||
* NOTE: this is actually provided in the low level assembly
|
* NOTE: this is actually provided in the low level assembly
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* a machine dependent representation of the interrupt masking prior to disabling
|
||||||
*/
|
*/
|
||||||
extern void int_disable_all();
|
extern short int_disable_all();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Restore interrupt masking state returned by a previous call to int_enable/int_disable
|
||||||
|
*
|
||||||
|
* NOTE: this is actually provided in the low level assembly
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* int_mask = machine dependent representation of the interrupt masking
|
||||||
|
*/
|
||||||
|
extern void int_restore(short int_mask);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Disable an interrupt by masking it
|
* Disable an interrupt by masking it
|
||||||
|
|
177
src/log.c
177
src/log.c
|
@ -15,6 +15,183 @@ void log_init() {
|
||||||
log_level = 999;
|
log_level = 999;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned short panic_number; /* The number of the kernel panic */
|
||||||
|
unsigned long panic_pc; /* The PC where the issue occurred */
|
||||||
|
unsigned long panic_address; /* The address that was accessed (for some exceptions) */
|
||||||
|
|
||||||
|
const char * err_messages[] = {
|
||||||
|
"OK",
|
||||||
|
"error",
|
||||||
|
"bad device number",
|
||||||
|
"operation timed out",
|
||||||
|
"device could not be initialized",
|
||||||
|
"could not read from device",
|
||||||
|
"could not write to device",
|
||||||
|
"out of bounds",
|
||||||
|
"no media",
|
||||||
|
"device is write protected",
|
||||||
|
"bad channel number",
|
||||||
|
"out of handles",
|
||||||
|
"bad handle",
|
||||||
|
"unknown file type",
|
||||||
|
"out of memory",
|
||||||
|
"bad binary file",
|
||||||
|
"file is not executable",
|
||||||
|
"not found",
|
||||||
|
"low level disk error",
|
||||||
|
"file system assertion failed",
|
||||||
|
"device not ready",
|
||||||
|
"file not found",
|
||||||
|
"directory not found",
|
||||||
|
"invalid path name",
|
||||||
|
"access denied",
|
||||||
|
"prohibited access",
|
||||||
|
"invalid object",
|
||||||
|
"drive is write protected",
|
||||||
|
"invalid drive",
|
||||||
|
"volume has no work area",
|
||||||
|
"no file system found",
|
||||||
|
"creation of file system aborted",
|
||||||
|
"file system timeout",
|
||||||
|
"file locked",
|
||||||
|
"not enough core",
|
||||||
|
"too many open files",
|
||||||
|
"file system invalid parameter"
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return human readable message for an error number
|
||||||
|
*/
|
||||||
|
const char * err_message(short err_number) {
|
||||||
|
short index = 0 - err_number;
|
||||||
|
|
||||||
|
if (index < sizeof(err_messages)) {
|
||||||
|
return err_messages[index];
|
||||||
|
} else {
|
||||||
|
return "unknown error";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Print an error message
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* channel = the number of the channel to print to
|
||||||
|
* message = a message string to print before the error
|
||||||
|
* err_number = the number of the error
|
||||||
|
*/
|
||||||
|
void err_print(short channel, const char * message, short err_number) {
|
||||||
|
char buffer[80];
|
||||||
|
|
||||||
|
if (err_number < 0) {
|
||||||
|
sprintf(buffer, "%s: %s\n", message, err_message(err_number));
|
||||||
|
} else {
|
||||||
|
sprintf(buffer, "%s: #%d\n", message, err_number);
|
||||||
|
}
|
||||||
|
|
||||||
|
sys_chan_write(channel, buffer, strlen(buffer));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Display a panic screen
|
||||||
|
*/
|
||||||
|
void panic() {
|
||||||
|
char buffer[80];
|
||||||
|
short column = 18;
|
||||||
|
short row = 10;
|
||||||
|
short address_expected = 0;
|
||||||
|
|
||||||
|
/* Shut off all interrupts */
|
||||||
|
int_disable_all();
|
||||||
|
|
||||||
|
/* Re-initialize the text screen */
|
||||||
|
text_init();
|
||||||
|
text_set_border(0, 0, 0, 0, 0);
|
||||||
|
text_set_color(0, 15, 1);
|
||||||
|
text_set_cursor(0, 0, 0, 0, 0);
|
||||||
|
text_clear(0, 2);
|
||||||
|
|
||||||
|
text_set_xy(0, column, row++);
|
||||||
|
sprintf(buffer, "\xDA\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xBF");
|
||||||
|
print(0, buffer);
|
||||||
|
|
||||||
|
text_set_xy(0, column, row++);
|
||||||
|
sprintf(buffer, "\xB3 \xB3");
|
||||||
|
print(0, buffer);
|
||||||
|
|
||||||
|
text_set_xy(0, column, row++);
|
||||||
|
sprintf(buffer, "\xB3 Oh dear, something has gone wrong... \xB3");
|
||||||
|
print(0, buffer);
|
||||||
|
|
||||||
|
text_set_xy(0, column, row++);
|
||||||
|
sprintf(buffer, "\xB3 \xB3");
|
||||||
|
print(0, buffer);
|
||||||
|
|
||||||
|
text_set_xy(0, column, row++);
|
||||||
|
switch (panic_number) {
|
||||||
|
case 2:
|
||||||
|
sprintf(buffer, "\xB3 Bus Error \xB3");
|
||||||
|
address_expected = 1;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
sprintf(buffer, "\xB3 Address Error \xB3");
|
||||||
|
address_expected = 1;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
sprintf(buffer, "\xB3 Illegal Instruction Error \xB3");
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
sprintf(buffer, "\xB3 Division by Zero Error \xB3");
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
sprintf(buffer, "\xB3 Range Check Exception \xB3");
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
sprintf(buffer, "\xB3 Overflow Exception \xB3");
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
sprintf(buffer, "\xB3 Privilege Exception \xB3");
|
||||||
|
break;
|
||||||
|
case 24:
|
||||||
|
sprintf(buffer, "\xB3 Spurious Interrupt \xB3");
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
sprintf(buffer, "\xB3 Unknown Exception \xB3");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
print(0, buffer);
|
||||||
|
|
||||||
|
text_set_xy(0, column, row++);
|
||||||
|
sprintf(buffer, "\xB3 \xB3");
|
||||||
|
print(0, buffer);
|
||||||
|
|
||||||
|
if (address_expected) {
|
||||||
|
text_set_xy(0, column, row++);
|
||||||
|
print(0, "\xB3 PC: ");
|
||||||
|
print_hex_32(0, panic_pc);
|
||||||
|
print(0, " Address: ");
|
||||||
|
print_hex_32(0, panic_address);
|
||||||
|
print(0, " \xB3");
|
||||||
|
} else {
|
||||||
|
text_set_xy(0, column, row++);
|
||||||
|
print(0, "\xB3 PC: ");
|
||||||
|
print_hex_32(0, panic_pc);
|
||||||
|
print(0, " \xB3");
|
||||||
|
}
|
||||||
|
|
||||||
|
text_set_xy(0, column, row++);
|
||||||
|
sprintf(buffer, "\xB3 \xB3");
|
||||||
|
print(0, buffer);
|
||||||
|
|
||||||
|
text_set_xy(0, column, row++);
|
||||||
|
sprintf(buffer, "\xC0\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xD9");
|
||||||
|
print(0, buffer);
|
||||||
|
|
||||||
|
/* Wait forever */
|
||||||
|
while (1) ;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set the maximum level of verbosity in logging.
|
* Set the maximum level of verbosity in logging.
|
||||||
* To be printed, a message must have a level lower or equal to this level.
|
* To be printed, a message must have a level lower or equal to this level.
|
||||||
|
|
23
src/log.h
23
src/log.h
|
@ -12,6 +12,29 @@
|
||||||
#define LOG_TRACE 4 /* Log tracing information (like entry into a subroutine) */
|
#define LOG_TRACE 4 /* Log tracing information (like entry into a subroutine) */
|
||||||
#define LOG_VERBOSE 5 /* Log a truly verbose message... the sort you almost never want to bother with */
|
#define LOG_VERBOSE 5 /* Log a truly verbose message... the sort you almost never want to bother with */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return human readable message for an error number
|
||||||
|
*/
|
||||||
|
extern const char * err_message(short err_number);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Print an error message
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* channel = the number of the channel to print to
|
||||||
|
* message = a message string to print before the error
|
||||||
|
* err_number = the number of the error
|
||||||
|
*/
|
||||||
|
extern void err_print(short channel, const char * message, short err_number);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Display a panic screen
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* vector = the number of the vector that was called
|
||||||
|
*/
|
||||||
|
extern void panic(unsigned short exception_number);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set the maximum level of verbosity in logging.
|
* Set the maximum level of verbosity in logging.
|
||||||
* To be printed, a message must have a level lower or equal to this level.
|
* To be printed, a message must have a level lower or equal to this level.
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
override CFLAGS = +../../vbcc/config/m68k-foenix -I. -I.. -I../include
|
|
||||||
|
|
||||||
asources = startup_m68k.s
|
asources = startup_m68k.s
|
||||||
aobjects = $(subst .s,.o,$(asources))
|
aobjects = $(subst .s,.o,$(asources))
|
||||||
csources = bios_m68k.c
|
csources = bios_m68k.c
|
||||||
|
|
|
@ -8,14 +8,23 @@
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "syscalls.h"
|
#include "syscalls.h"
|
||||||
#include "interrupt.h"
|
#include "interrupt.h"
|
||||||
|
#include "proc.h"
|
||||||
#include "dev/channel.h"
|
#include "dev/channel.h"
|
||||||
#include "dev/block.h"
|
#include "dev/block.h"
|
||||||
#include "dev/fsys.h"
|
#include "dev/fsys.h"
|
||||||
|
#include "dev/rtc.h"
|
||||||
|
#include "sys_general.h"
|
||||||
|
|
||||||
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
|
#include "dev/kbd_mo.h"
|
||||||
|
#else
|
||||||
|
#include "dev/ps2.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Determine the correct system function implementation and call it.
|
* Determine the correct system function implementation and call it.
|
||||||
*/
|
*/
|
||||||
int32_t syscall_dispatch(int32_t function, int32_t param0, int32_t param1, int32_t param2, int32_t param3, int32_t param4, int32_t param5) {
|
unsigned long syscall_dispatch(int32_t function, int32_t param0, int32_t param1, int32_t param2, int32_t param3, int32_t param4, int32_t param5) {
|
||||||
switch (function & 0x00f0) {
|
switch (function & 0x00f0) {
|
||||||
case 0x00:
|
case 0x00:
|
||||||
/* Core System Calls */
|
/* Core System Calls */
|
||||||
|
@ -39,12 +48,10 @@ int32_t syscall_dispatch(int32_t function, int32_t param0, int32_t param1, int32
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case KFN_INT_ENABLE_ALL:
|
case KFN_INT_ENABLE_ALL:
|
||||||
int_enable_all();
|
return int_enable_all();
|
||||||
return;
|
|
||||||
|
|
||||||
case KFN_INT_DISABLE_ALL:
|
case KFN_INT_DISABLE_ALL:
|
||||||
int_disable_all();
|
return int_disable_all();
|
||||||
return;
|
|
||||||
|
|
||||||
case KFN_INT_CLEAR:
|
case KFN_INT_CLEAR:
|
||||||
int_clear((unsigned short)param0);
|
int_clear((unsigned short)param0);
|
||||||
|
@ -53,6 +60,10 @@ int32_t syscall_dispatch(int32_t function, int32_t param0, int32_t param1, int32
|
||||||
case KFN_INT_PENDING:
|
case KFN_INT_PENDING:
|
||||||
return int_pending((unsigned short)param0);
|
return int_pending((unsigned short)param0);
|
||||||
|
|
||||||
|
case KFN_SYS_GET_INFO:
|
||||||
|
sys_get_information((p_sys_info)param0);
|
||||||
|
return;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -88,6 +99,12 @@ int32_t syscall_dispatch(int32_t function, int32_t param0, int32_t param1, int32
|
||||||
case KFN_CHAN_IOCTRL:
|
case KFN_CHAN_IOCTRL:
|
||||||
return chan_ioctrl((short)param0, (short)param1, (unsigned char *)param2, (short)param3);
|
return chan_ioctrl((short)param0, (short)param1, (unsigned char *)param2, (short)param3);
|
||||||
|
|
||||||
|
case KFN_CHAN_OPEN:
|
||||||
|
return chan_open((short)param0, (const char *)param1, (short)param2);
|
||||||
|
|
||||||
|
case KFN_CHAN_CLOSE:
|
||||||
|
return chan_close((short)param0);
|
||||||
|
|
||||||
case KFN_CHAN_REGISTER:
|
case KFN_CHAN_REGISTER:
|
||||||
return cdev_register((p_dev_chan)param0);
|
return cdev_register((p_dev_chan)param0);
|
||||||
|
|
||||||
|
@ -152,12 +169,72 @@ int32_t syscall_dispatch(int32_t function, int32_t param0, int32_t param1, int32
|
||||||
case KFN_RENAME:
|
case KFN_RENAME:
|
||||||
return fsys_rename((const char *)param0, (const char *)param1);
|
return fsys_rename((const char *)param0, (const char *)param1);
|
||||||
|
|
||||||
|
case KFN_LOAD:
|
||||||
|
return fsys_load((char *)param0, (long)param1, (long *)param2);
|
||||||
|
|
||||||
|
case KFN_GET_LABEL:
|
||||||
|
return fsys_getlabel((char *)param0, (char *)param1);
|
||||||
|
|
||||||
|
case KFN_SET_LABEL:
|
||||||
|
return fsys_setlabel((short)param0, (char *)param1);
|
||||||
|
|
||||||
|
case KFN_GET_CWD:
|
||||||
|
return fsys_get_cwd((char *)param0);
|
||||||
|
|
||||||
|
case KFN_SET_CWD:
|
||||||
|
return fsys_set_cwd((char *)param0);
|
||||||
|
|
||||||
|
case KFN_LOAD_REGISTER:
|
||||||
|
return fsys_register_loader((char *)param0, (p_file_loader)param1);
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 0x40:
|
||||||
|
/* Process and Memory functions */
|
||||||
|
case KFN_RUN:
|
||||||
|
return proc_run((char *)param0, (int)param1, (char *)param2);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x50:
|
||||||
|
/* Misc functions */
|
||||||
|
switch (function) {
|
||||||
|
case KFN_TIME_JIFFIES:
|
||||||
|
return rtc_get_jiffies();
|
||||||
|
|
||||||
|
case KFN_TIME_SETRTC:
|
||||||
|
rtc_set_time((p_time)param0);
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case KFN_TIME_GETRTC:
|
||||||
|
rtc_get_time((p_time)param0);
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case KFN_KBD_SCANCODE:
|
||||||
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
|
return kbdmo_get_scancode();
|
||||||
|
#else
|
||||||
|
return kbd_get_scancode();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
case KFN_ERR_MESSAGE:
|
||||||
|
return (unsigned long)err_message((short)param0);
|
||||||
|
|
||||||
|
case KFN_KBD_LAYOUT:
|
||||||
|
#if MODEL == MODEL_FOENIX_A2560K
|
||||||
|
return kbdmo_layout((const char *)param0);
|
||||||
|
#else
|
||||||
|
return kbd_layout((const char *)param0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
xref ___main
|
xref ___main
|
||||||
xref _cli_rerepl
|
xref _cli_rerepl
|
||||||
|
xref _panic
|
||||||
|
xref _panic_number
|
||||||
|
|
||||||
xdef _syscall
|
xdef _syscall
|
||||||
xdef ___exit
|
xdef ___exit
|
||||||
|
@ -8,17 +10,24 @@
|
||||||
xdef _call_user
|
xdef _call_user
|
||||||
xdef _restart_cli
|
xdef _restart_cli
|
||||||
|
|
||||||
|
;
|
||||||
|
; Interrupt registers for A2560U and U+
|
||||||
|
;
|
||||||
|
PENDING_GRP0 = $00B00100
|
||||||
|
PENDING_GRP1 = $00B00102
|
||||||
|
PENDING_GRP2 = $00B00104
|
||||||
|
|
||||||
section "vectors",code
|
section "vectors",code
|
||||||
|
|
||||||
dc.l ___STACK ; 00 - Initial stack pointer
|
dc.l ___STACK ; 00 - Initial stack pointer
|
||||||
dc.l coldboot ; 01 - Initial PC
|
dc.l coldboot ; 01 - Initial PC
|
||||||
dc.l not_impl ; 02 - Bus error
|
dc.l _handle_bus_err ; 02 - Bus error
|
||||||
dc.l not_impl ; 03 - Address error
|
dc.l _handle_addr_err ; 03 - Address error
|
||||||
dc.l not_impl ; 04 - Illegal instruction
|
dc.l _handle_inst_err ; 04 - Illegal instruction
|
||||||
dc.l not_impl ; 05 - Zero divide
|
dc.l _handle_div0_err ; 05 - Zero divide
|
||||||
dc.l not_impl ; 06 - CHK instruction
|
dc.l _handle_chk_err ; 06 - CHK instruction
|
||||||
dc.l not_impl ; 07 - TRAPV instruction
|
dc.l _handle_trapv_err ; 07 - TRAPV instruction
|
||||||
dc.l not_impl ; 08 - Priviledge error
|
dc.l _handle_priv_err ; 08 - Privilege error
|
||||||
dc.l not_impl ; 09 - Trace
|
dc.l not_impl ; 09 - Trace
|
||||||
dc.l not_impl ; 10 - Line 1010
|
dc.l not_impl ; 10 - Line 1010
|
||||||
dc.l not_impl ; 11 - Line 1111
|
dc.l not_impl ; 11 - Line 1111
|
||||||
|
@ -34,13 +43,13 @@
|
||||||
dc.l not_impl ; 21 - Reserved
|
dc.l not_impl ; 21 - Reserved
|
||||||
dc.l not_impl ; 22 - Reserved
|
dc.l not_impl ; 22 - Reserved
|
||||||
dc.l not_impl ; 23 - Reserved
|
dc.l not_impl ; 23 - Reserved
|
||||||
dc.l not_impl ; 24 - Spurious Interrupt
|
dc.l _handle_spurious ; 24 - Spurious Interrupt
|
||||||
dc.l autovec1 ; 25 - Level 1 Interrupt Autovector
|
dc.l not_impl ; 25 - Level 1 Interrupt Autovector
|
||||||
dc.l autovec2 ; 26 - Level 2 Interrupt Autovector
|
dc.l not_impl ; 26 - Level 2 Interrupt Autovector
|
||||||
dc.l not_impl ; 27 - Level 3 Interrupt Autovector
|
dc.l not_impl ; 27 - Level 3 Interrupt Autovector
|
||||||
dc.l not_impl ; 28 - Level 4 Interrupt Autovector
|
dc.l not_impl ; 28 - Level 4 Interrupt Autovector
|
||||||
dc.l not_impl ; 29 - Level 5 Interrupt Autovector
|
dc.l not_impl ; 29 - Level 5 Interrupt Autovector
|
||||||
dc.l not_impl ; 30 - Level 6 Interrupt Autovector
|
dc.l autovec2 ; 30 - Level 6 Interrupt Autovector
|
||||||
dc.l not_impl ; 31 - Level 7 Interrupt Autovector
|
dc.l not_impl ; 31 - Level 7 Interrupt Autovector
|
||||||
dc.l not_impl ; 32 - TRAP #0
|
dc.l not_impl ; 32 - TRAP #0
|
||||||
dc.l not_impl ; 33 - TRAP #1
|
dc.l not_impl ; 33 - TRAP #1
|
||||||
|
@ -77,38 +86,36 @@
|
||||||
dc.l interrupt_x10 ; 64 - Interrupt 0x10 - SuperIO - PS/2 Keyboard
|
dc.l interrupt_x10 ; 64 - Interrupt 0x10 - SuperIO - PS/2 Keyboard
|
||||||
dc.l interrupt_x11 ; 65 - Interrupt 0x11 - A2560K Built-in Keyboard (Mo)
|
dc.l interrupt_x11 ; 65 - Interrupt 0x11 - A2560K Built-in Keyboard (Mo)
|
||||||
dc.l interrupt_x12 ; 66 - Interrupt 0x12 - SuperIO - PS/2 Mouse
|
dc.l interrupt_x12 ; 66 - Interrupt 0x12 - SuperIO - PS/2 Mouse
|
||||||
; dc.l interrupt_x13 ; 67 - Interrupt 0x13 - SuperIO - COM1
|
dc.l not_impl ; 67 - Interrupt 0x13 - SuperIO - COM1
|
||||||
; dc.l interrupt_x14 ; 68 - Interrupt 0x14 - SuperIO - COM2
|
dc.l not_impl ; 68 - Interrupt 0x14 - SuperIO - COM2
|
||||||
; dc.l interrupt_x15 ; 69 - Interrupt 0x15 - SuperIO - LPT1
|
dc.l not_impl ; 69 - Interrupt 0x15 - SuperIO - LPT1
|
||||||
; dc.l interrupt_x16 ; 70 - Interrupt 0x16 - SuperIO - Floppy Disk Controller
|
dc.l not_impl ; 70 - Interrupt 0x16 - SuperIO - Floppy Disk Controller
|
||||||
; dc.l interrupt_x17 ; 71 - Interrupt 0x17 - SuperIO - MIDI
|
dc.l not_impl ; 71 - Interrupt 0x17 - SuperIO - MIDI
|
||||||
; dc.l interrupt_x18 ; 72 - Interrupt 0x18 - Timer 0
|
dc.l not_impl ; 72 - Interrupt 0x18 - Timer 0
|
||||||
; dc.l interrupt_x19 ; 73 - Interrupt 0x19 - Timer 1
|
dc.l not_impl ; 73 - Interrupt 0x19 - Timer 1
|
||||||
; dc.l interrupt_x1A ; 74 - Interrupt 0x1A - Timer 2
|
dc.l not_impl ; 74 - Interrupt 0x1A - Timer 2
|
||||||
; dc.l interrupt_x1B ; 76 - Interrupt 0x1B - Timer 3
|
dc.l not_impl ; 76 - Interrupt 0x1B - Timer 3
|
||||||
; dc.l interrupt_x1C ; 75 - Interrupt 0x1C - Timer 4
|
dc.l not_impl ; 75 - Interrupt 0x1C - Timer 4
|
||||||
; dc.l not_impl ; 77 - Interrupt 0x1D - Reserved
|
dc.l not_impl ; 77 - Interrupt 0x1D - Reserved
|
||||||
; dc.l not_impl ; 78 - Interrupt 0x1E - Reserved
|
dc.l not_impl ; 78 - Interrupt 0x1E - Reserved
|
||||||
dc.l interrupt_x1F ; 79 - Interrupt 0x1F - Real Time Clock
|
dc.l interrupt_x1F ; 79 - Interrupt 0x1F - Real Time Clock
|
||||||
|
|
||||||
; dc.l interrupt_x20 ; 80 - Interrupt 0x20 - IDE HDD Generated Interrupt
|
dc.l not_impl ; 80 - Interrupt 0x20 - IDE HDD Generated Interrupt
|
||||||
; dc.l interrupt_x21 ; 81 - Interrupt 0x21 - SDCard Insert
|
dc.l not_impl ; 81 - Interrupt 0x21 - SDCard Insert
|
||||||
; dc.l interrupt_x22 ; 82 - Interrupt 0x22 - SDCard Controller
|
dc.l not_impl ; 82 - Interrupt 0x22 - SDCard Controller
|
||||||
; dc.l interrupt_x23 ; 83 - Interrupt 0x23 - Internal OPM
|
dc.l not_impl ; 83 - Interrupt 0x23 - Internal OPM
|
||||||
; dc.l interrupt_x24 ; 84 - Interrupt 0x24 - External OPN2
|
dc.l not_impl ; 84 - Interrupt 0x24 - External OPN2
|
||||||
; dc.l interrupt_x25 ; 85 - Interrupt 0x25 - External OPL3
|
dc.l not_impl ; 85 - Interrupt 0x25 - External OPL3
|
||||||
; dc.l interrupt_x26 ; 86 - Interrupt 0x26 - Reserved
|
dc.l not_impl ; 86 - Interrupt 0x26 - Reserved
|
||||||
; dc.l interrupt_x27 ; 87 - Interrupt 0x27 - Reserved
|
dc.l not_impl ; 87 - Interrupt 0x27 - Reserved
|
||||||
; dc.l interrupt_x28 ; 88 - Interrupt 0x28 - Beatrix Interrupt 0
|
dc.l not_impl ; 88 - Interrupt 0x28 - Beatrix Interrupt 0
|
||||||
; dc.l interrupt_x29 ; 89 - Interrupt 0x29 - Beatrix Interrupt 1
|
dc.l not_impl ; 89 - Interrupt 0x29 - Beatrix Interrupt 1
|
||||||
; dc.l interrupt_x2A ; 90 - Interrupt 0x2A - Beatrix Interrupt 2
|
dc.l not_impl ; 90 - Interrupt 0x2A - Beatrix Interrupt 2
|
||||||
; dc.l interrupt_x2B ; 91 - Interrupt 0x2B - Beatrix Interrupt 3
|
dc.l not_impl ; 91 - Interrupt 0x2B - Beatrix Interrupt 3
|
||||||
; dc.l interrupt_x2C ; 92 - Interrupt 0x2C - Reserved
|
dc.l not_impl ; 92 - Interrupt 0x2C - Reserved
|
||||||
; dc.l interrupt_x2D ; 93 - Interrupt 0x2D - DAC1 Playback Done Interrupt (48K)
|
dc.l not_impl ; 93 - Interrupt 0x2D - DAC1 Playback Done Interrupt (48K)
|
||||||
; dc.l interrupt_x2E ; 94 - Interrupt 0x2E - Reserved
|
dc.l not_impl ; 94 - Interrupt 0x2E - Reserved
|
||||||
; dc.l interrupt_x2F ; 95 - Interrupt 0x2F - DAC0 Playback Done Interrupt (44.1K)
|
dc.l not_impl ; 95 - Interrupt 0x2F - DAC0 Playback Done Interrupt (44.1K)
|
||||||
|
|
||||||
; TODO: make room for reserved and User Interrupt Vectors
|
|
||||||
|
|
||||||
code
|
code
|
||||||
|
|
||||||
|
@ -119,13 +126,13 @@ coldboot: lea ___STACK,sp
|
||||||
move.l #___BSSSIZE,d0
|
move.l #___BSSSIZE,d0
|
||||||
beq callmain
|
beq callmain
|
||||||
|
|
||||||
clrloop: clr.l (a0)+
|
; clrloop: clr.l (a0)+
|
||||||
subq.l #4,d0
|
; subq.l #4,d0
|
||||||
bne clrloop
|
; bne clrloop
|
||||||
|
|
||||||
; Set TRAP #13 vector handler
|
; Set TRAP #15 vector handler
|
||||||
lea h_trap_15,a0 ; Address of the handler
|
lea h_trap_15,a0 ; Address of the handler
|
||||||
move.l #(13+32)<<2,a1 ; TRAP#13 vector address
|
move.l #(13+32)<<2,a1 ; TRAP#15 vector address
|
||||||
move.l a0,(a1) ; Set the vector
|
move.l a0,(a1) ; Set the vector
|
||||||
|
|
||||||
callmain: jsr ___main ; call __main to transfer to the C code
|
callmain: jsr ___main ; call __main to transfer to the C code
|
||||||
|
@ -158,27 +165,29 @@ autovec2: movem.l d0-d7/a0-a6,-(a7)
|
||||||
;
|
;
|
||||||
int_dispatch:
|
int_dispatch:
|
||||||
lea _g_int_handler,a0 ; Look in the interrupt handler table
|
lea _g_int_handler,a0 ; Look in the interrupt handler table
|
||||||
movea.l (0,a0,d0),a1 ; Get the address of the handler
|
move.l (0,a0,d0),d0 ; Get the address of the handler
|
||||||
beq intdis_end ; If there isn't one, just return
|
beq intdis_end ; If there isn't one, just return
|
||||||
|
movea.l d0,a0
|
||||||
|
jsr (a0) ; If there is, call it.
|
||||||
|
|
||||||
jsr (a1) ; If there is, call it.
|
intdis_end: movem.l (a7)+,d0-d7/a0-a6 ; Restore affected registers
|
||||||
|
|
||||||
intdis_end: movem.l (a7)+,d0-d7/a0-a6 ; Restore the registers
|
|
||||||
rte
|
rte
|
||||||
|
|
||||||
;
|
;
|
||||||
; Interrupt Vector 0x10 -- SuperIO Keyboard
|
; Interrupt Vector 0x10 -- SuperIO Keyboard
|
||||||
;
|
;
|
||||||
interrupt_x10:
|
interrupt_x10:
|
||||||
movem.l d0-d7/a0-a6,-(a7) ; Save all the registers
|
move.w #$0001,(PENDING_GRP1) ; Clear the flag for INT 10
|
||||||
|
movem.l d0-d7/a0-a6,-(a7) ; Save affected registers
|
||||||
move.w #($10<<2),d0 ; Get the offset to interrupt 0x11
|
move.w #($10<<2),d0 ; Get the offset to interrupt 0x11
|
||||||
bra int_dispatch ; And process the interrupt
|
bra int_dispatch
|
||||||
|
|
||||||
;
|
;
|
||||||
; Interrupt Vector 0x11 -- A2560K "Mo" keyboard
|
; Interrupt Vector 0x11 -- A2560K "Mo" keyboard
|
||||||
;
|
;
|
||||||
interrupt_x11:
|
interrupt_x11:
|
||||||
movem.l d0-d7/a0-a6,-(a7) ; Save all the registers
|
move.w #$0002,(PENDING_GRP1) ; Clear the flag for INT 11
|
||||||
|
movem.l d0-d7/a0-a6,-(a7) ; Save affected registers
|
||||||
move.w #($11<<2),d0 ; Get the offset to interrupt 0x11
|
move.w #($11<<2),d0 ; Get the offset to interrupt 0x11
|
||||||
bra int_dispatch ; And process the interrupt
|
bra int_dispatch ; And process the interrupt
|
||||||
|
|
||||||
|
@ -186,21 +195,28 @@ interrupt_x11:
|
||||||
; Interrupt Vector 0x12 -- SuperIO Mouse
|
; Interrupt Vector 0x12 -- SuperIO Mouse
|
||||||
;
|
;
|
||||||
interrupt_x12:
|
interrupt_x12:
|
||||||
movem.l d0-d7/a0-a6,-(a7) ; Save all the registers
|
move.w #$0004,(PENDING_GRP1) ; Clear the flag for INT 12
|
||||||
|
movem.l d0-d7/a0-a6,-(a7) ; Save affected registers
|
||||||
move.w #($12<<2),d0 ; Get the offset to interrupt 0x11
|
move.w #($12<<2),d0 ; Get the offset to interrupt 0x11
|
||||||
bra int_dispatch ; And process the interrupt
|
bra int_dispatch ; And process the interrupt
|
||||||
; jsr _mouse_handle_irq
|
|
||||||
; movem.l (a7)+,d0-d7/a0-a6 ; Restore the registers
|
|
||||||
; rte
|
|
||||||
|
|
||||||
;
|
;
|
||||||
; Interrupt Vector 0x1F -- RTC
|
; Interrupt Vector 0x1F -- RTC
|
||||||
;
|
;
|
||||||
interrupt_x1F:
|
interrupt_x1F:
|
||||||
movem.l d0-d7/a0-a6,-(a7) ; Save all the registers
|
move.w #$8000,(PENDING_GRP1) ; Clear the flag for INT 1F
|
||||||
|
movem.l d0-d7/a0-a6,-(a7) ; Save affected registers
|
||||||
move.w #($1f<<2),d0 ; Get the offset to interrupt 0x1f
|
move.w #($1f<<2),d0 ; Get the offset to interrupt 0x1f
|
||||||
bra int_dispatch ; And process the interrupt
|
bra int_dispatch ; And process the interrupt
|
||||||
|
|
||||||
|
;
|
||||||
|
; Interrupt Vector 0x21 -- SDCard Insert
|
||||||
|
;
|
||||||
|
interrupt_x21:
|
||||||
|
movem.l d0-d7/a0-a6,-(a7) ; Save affected registers
|
||||||
|
move.w #($21<<2),d0 ; Get the offset to interrupt 0x1f
|
||||||
|
bra int_dispatch ; And process the interrupt
|
||||||
|
|
||||||
;
|
;
|
||||||
; Unimplemented Exception Handler -- just return
|
; Unimplemented Exception Handler -- just return
|
||||||
;
|
;
|
||||||
|
@ -209,15 +225,111 @@ not_impl: rte
|
||||||
;
|
;
|
||||||
; Enable all interrupts
|
; Enable all interrupts
|
||||||
;
|
;
|
||||||
_int_enable_all: andi.w #$F8FF,SR
|
_int_enable_all: move.w SR,d0 ; Save the old level for return
|
||||||
|
andi.w #$0700,d0
|
||||||
|
lsr.w #8,d0
|
||||||
|
ext.l d0
|
||||||
|
|
||||||
|
andi.w #$F8FF,SR ; Clear the level
|
||||||
rts
|
rts
|
||||||
|
|
||||||
;
|
;
|
||||||
; Disable all interrupts
|
; Disable all interrupts
|
||||||
;
|
;
|
||||||
_int_disable_all: ori.w #$0700,SR
|
_int_disable_all: move.w SR,d0 ; Save the old level for return
|
||||||
|
andi.w #$0700,d0
|
||||||
|
lsr.w #8,d0
|
||||||
|
ext.l d0
|
||||||
|
|
||||||
|
ori.w #$0700,SR ; Set the level to 7
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
;
|
||||||
|
; Restore interrupt priority
|
||||||
|
;
|
||||||
|
_int_restore: move.w (4,sp),d0 ; Get the priority into d0
|
||||||
|
andi.w #3,d0
|
||||||
|
lsl.w #8,d0
|
||||||
|
|
||||||
|
move.w sr,d1 ; Get the current SR into d1
|
||||||
|
andi.w #$F8FF,d1 ; Clear the old priority
|
||||||
|
or.w d0,d1 ; And set it to the current
|
||||||
|
move.w d1,sr ; And set the level
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
;
|
||||||
|
; Handlers for the various exceptions...
|
||||||
|
;
|
||||||
|
; These all go to the kernel panic screen after placing the
|
||||||
|
; triggering PC address in "panic_pc" and the number of the exception
|
||||||
|
; in "panic_number". Bus and address errors will also put the
|
||||||
|
; address involved in "panic_address".
|
||||||
|
;
|
||||||
|
|
||||||
|
_handle_bus_err:
|
||||||
|
lea _panic_number,a0
|
||||||
|
lea _panic_pc,a1
|
||||||
|
lea _panic_address,a2
|
||||||
|
move.w #2,(a0)
|
||||||
|
move.l (10,a7),(a1)
|
||||||
|
move.l (2,a7),(a2)
|
||||||
|
bra call_panic
|
||||||
|
|
||||||
|
_handle_addr_err:
|
||||||
|
lea _panic_number,a0
|
||||||
|
lea _panic_pc,a1
|
||||||
|
lea _panic_address,a2
|
||||||
|
move.w #3,(a0)
|
||||||
|
move.l (10,a7),(a1)
|
||||||
|
move.l (2,a7),(a2)
|
||||||
|
bra call_panic
|
||||||
|
|
||||||
|
_handle_inst_err:
|
||||||
|
lea _panic_number,a0
|
||||||
|
lea _panic_pc,a1
|
||||||
|
move.w #4,(a0)
|
||||||
|
move.l (2,a7),(a1)
|
||||||
|
bra call_panic
|
||||||
|
|
||||||
|
_handle_div0_err:
|
||||||
|
lea _panic_number,a0
|
||||||
|
lea _panic_pc,a1
|
||||||
|
move.w #5,(a0)
|
||||||
|
move.l (2,a7),(a1)
|
||||||
|
bra call_panic
|
||||||
|
|
||||||
|
_handle_chk_err:
|
||||||
|
lea _panic_number,a0
|
||||||
|
lea _panic_pc,a1
|
||||||
|
move.w #6,(a0)
|
||||||
|
move.l (2,a7),(a1)
|
||||||
|
bra call_panic
|
||||||
|
|
||||||
|
_handle_trapv_err:
|
||||||
|
lea _panic_number,a0
|
||||||
|
lea _panic_pc,a1
|
||||||
|
move.w #7,(a0)
|
||||||
|
move.l (2,a7),(a1)
|
||||||
|
bra call_panic
|
||||||
|
|
||||||
|
_handle_priv_err:
|
||||||
|
lea _panic_number,a0
|
||||||
|
lea _panic_pc,a1
|
||||||
|
move.w #8,(a0)
|
||||||
|
move.l (2,a7),(a1)
|
||||||
|
bra call_panic
|
||||||
|
|
||||||
|
_handle_spurious:
|
||||||
|
lea _panic_number,a0
|
||||||
|
lea _panic_pc,a1
|
||||||
|
move.w #24,(a0)
|
||||||
|
move.l (2,a7),(a1)
|
||||||
|
bra call_panic
|
||||||
|
|
||||||
|
call_panic: jsr _panic
|
||||||
|
panic_lock: bra panic_lock
|
||||||
|
|
||||||
;
|
;
|
||||||
; Function to make a system call based on the number of the system function:
|
; Function to make a system call based on the number of the system function:
|
||||||
; int32_t syscall(int32_t number, int32_t p0, int32_t p1, int32_t p2, int32_t p3, int32_t p4, int32_t p5)
|
; int32_t syscall(int32_t number, int32_t p0, int32_t p1, int32_t p2, int32_t p3, int32_t p4, int32_t p5)
|
||||||
|
@ -237,7 +349,6 @@ _syscall:
|
||||||
movem.l (sp)+,d1-d7 ; Restore caller's registers
|
movem.l (sp)+,d1-d7 ; Restore caller's registers
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
|
||||||
;
|
;
|
||||||
; TRAP#15 handler... transfer control to the C dispatcher
|
; TRAP#15 handler... transfer control to the C dispatcher
|
||||||
;
|
;
|
||||||
|
@ -265,11 +376,16 @@ h_trap_15:
|
||||||
; a1 = location to set user stack pointer
|
; a1 = location to set user stack pointer
|
||||||
;
|
;
|
||||||
_call_user:
|
_call_user:
|
||||||
move.l (4,a7),a0
|
move.l (4,a7),a0 ; Get the pointer to the code to start
|
||||||
move.l (8,a7),a1
|
move.l (8,a7),a1 ; Get the pointer to the process's stack
|
||||||
|
move.l (12,a7),d0 ; Get the number of parameters passed
|
||||||
|
move.l (16,a7),a2 ; Get the pointer to the parameters
|
||||||
andi #$dfff,sr ; Drop into user mode
|
andi #$dfff,sr ; Drop into user mode
|
||||||
movea.l a1,a7 ; Set the stack
|
movea.l a1,a7 ; Set the stack
|
||||||
jmp (a0)
|
|
||||||
|
move.l a2,-(a7) ; Push the parameters list
|
||||||
|
move.l d0,-(a7) ; Push the parameter count
|
||||||
|
jsr (a0)
|
||||||
|
|
||||||
_restart_cli:
|
_restart_cli:
|
||||||
lea ___STACK,sp
|
lea ___STACK,sp
|
||||||
|
|
12079
src/mapfile
12079
src/mapfile
File diff suppressed because it is too large
Load diff
16
src/proc.c
16
src/proc.c
|
@ -10,7 +10,7 @@
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "dev/fsys.h"
|
#include "dev/fsys.h"
|
||||||
|
|
||||||
static const long k_default_stack = 0x0000ffff; /* For now... we're just going to put the user stack under 0x00010000 */
|
static const long k_default_stack = 0x00010000; /* For now... we're just going to put the user stack under 0x00010000 */
|
||||||
static int g_proc_result;
|
static int g_proc_result;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -18,7 +18,7 @@ static int g_proc_result;
|
||||||
*/
|
*/
|
||||||
extern void restart_cli();
|
extern void restart_cli();
|
||||||
|
|
||||||
extern void call_user(long start, long stack);
|
extern void call_user(long start, long stack, int argc, char * argv[]);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Start a user mode process
|
* Start a user mode process
|
||||||
|
@ -26,15 +26,17 @@ extern void call_user(long start, long stack);
|
||||||
* Inputs:
|
* Inputs:
|
||||||
* start = the address to start execution
|
* start = the address to start execution
|
||||||
* stack = the location to start the user mode stack
|
* stack = the location to start the user mode stack
|
||||||
|
* argc = the number of parameters
|
||||||
|
* argv = the array of parameters
|
||||||
*/
|
*/
|
||||||
void proc_exec(long start, long stack) {
|
void proc_exec(long start, long stack, int argc, char * argv[]) {
|
||||||
TRACE("proc_exec");
|
TRACE("proc_exec");
|
||||||
|
|
||||||
log_num(LOG_INFO, "proc_exec start: ", start);
|
log_num(LOG_INFO, "proc_exec start: ", start);
|
||||||
log_num(LOG_INFO, "proc_exec stack: ", stack);
|
log_num(LOG_INFO, "proc_exec stack: ", stack);
|
||||||
|
|
||||||
g_proc_result = 0;
|
g_proc_result = 0;
|
||||||
call_user(start, stack);
|
call_user(start, stack, argc, argv);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -63,11 +65,13 @@ int proc_get_result() {
|
||||||
*
|
*
|
||||||
* Inputs:
|
* Inputs:
|
||||||
* path = the path to try to load
|
* path = the path to try to load
|
||||||
|
* argc = the number of parameters
|
||||||
|
* argv = the array of parameters
|
||||||
*
|
*
|
||||||
* Returns:
|
* Returns:
|
||||||
* returns an error code on failure, will not return on success
|
* returns an error code on failure, will not return on success
|
||||||
*/
|
*/
|
||||||
short proc_run(const char * path) {
|
short proc_run(const char * path, int argc, char * argv[]) {
|
||||||
|
|
||||||
TRACE("proc_run");
|
TRACE("proc_run");
|
||||||
|
|
||||||
|
@ -79,7 +83,7 @@ short proc_run(const char * path) {
|
||||||
short result = fsys_load(path, 0, &start);
|
short result = fsys_load(path, 0, &start);
|
||||||
if (result == 0) {
|
if (result == 0) {
|
||||||
if (start != 0) {
|
if (start != 0) {
|
||||||
proc_exec(start, k_default_stack);
|
proc_exec(start, k_default_stack, argc, argv);
|
||||||
} else {
|
} else {
|
||||||
log_num(LOG_ERROR, "Couldn't execute file: ", result);
|
log_num(LOG_ERROR, "Couldn't execute file: ", result);
|
||||||
return ERR_NOT_EXECUTABLE;
|
return ERR_NOT_EXECUTABLE;
|
||||||
|
|
|
@ -15,8 +15,10 @@
|
||||||
* Inputs:
|
* Inputs:
|
||||||
* start = the address to start execution
|
* start = the address to start execution
|
||||||
* stack = the location to start the user mode stack
|
* stack = the location to start the user mode stack
|
||||||
|
* argc = the number of parameters
|
||||||
|
* argv = the array of parameters
|
||||||
*/
|
*/
|
||||||
extern void proc_exec(long start, long stack);
|
extern void proc_exec(long start, long stack, int argc, char * argv[]);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Quit the current user process
|
* Quit the current user process
|
||||||
|
@ -39,10 +41,12 @@ extern int proc_get_result();
|
||||||
*
|
*
|
||||||
* Inputs:
|
* Inputs:
|
||||||
* path = the path to try to load
|
* path = the path to try to load
|
||||||
|
* argc = the number of parameters
|
||||||
|
* argv = the array of parameters
|
||||||
*
|
*
|
||||||
* Returns:
|
* Returns:
|
||||||
* returns an error code on failure, will not return on success
|
* returns an error code on failure, will not return on success
|
||||||
*/
|
*/
|
||||||
extern short proc_run(const char * path);
|
extern short proc_run(const char * path, int argc, char * argv[]);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
BIN
src/rsrc/bitmaps/Splash A2560U 4.bmp
Normal file
BIN
src/rsrc/bitmaps/Splash A2560U 4.bmp
Normal file
Binary file not shown.
After Width: | Height: | Size: 301 KiB |
63
src/rsrc/bitmaps/bmp2c.py
Normal file
63
src/rsrc/bitmaps/bmp2c.py
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
#
|
||||||
|
# Convert an image for the C256
|
||||||
|
#
|
||||||
|
|
||||||
|
from PIL import Image
|
||||||
|
from optparse import OptionParser
|
||||||
|
|
||||||
|
def emit(output, count, pixel_count, last_pixel):
|
||||||
|
if count % 16 == 0:
|
||||||
|
if count == 0:
|
||||||
|
output.write("\t0x{0:02X}, 0x{1:02X}".format(pixel_count, last_pixel))
|
||||||
|
else:
|
||||||
|
output.write(",\n\t0x{0:02X}, 0x{1:02X}".format(pixel_count, last_pixel))
|
||||||
|
else:
|
||||||
|
output.write(", 0x{0:02X}, 0x{1:02X}".format(pixel_count, last_pixel))
|
||||||
|
|
||||||
|
parser = OptionParser()
|
||||||
|
parser.add_option("-i", "--input", dest="input", help="Source image file")
|
||||||
|
parser.add_option("-o", "--output", dest="output", default="image.h", help="Destination for image and color data.")
|
||||||
|
|
||||||
|
(options, args) = parser.parse_args()
|
||||||
|
|
||||||
|
if options.input:
|
||||||
|
with open(options.output, "w") as output_file:
|
||||||
|
with Image.open(options.input) as im:
|
||||||
|
output_file.write("unsigned char splashscreen_lut[] = {\n")
|
||||||
|
palette = im.getpalette()
|
||||||
|
while palette:
|
||||||
|
r = palette.pop(0)
|
||||||
|
g = palette.pop(0)
|
||||||
|
b = palette.pop(0)
|
||||||
|
output_file.write("\t0x{0:02X}, 0x{1:02X}, 0x{2:02X}, 0x00,\n".format(b, g, r))
|
||||||
|
output_file.write("}\n\n")
|
||||||
|
|
||||||
|
last_pixel = -1
|
||||||
|
pixel_count = 0
|
||||||
|
count = 0
|
||||||
|
|
||||||
|
output_file.write("unsigned char splashscreen_pix[] = {\n")
|
||||||
|
(w, h) = im.size
|
||||||
|
for v in range(0, h):
|
||||||
|
for u in range(0, w):
|
||||||
|
pixel = im.getpixel((u, v))
|
||||||
|
|
||||||
|
if last_pixel != pixel:
|
||||||
|
if last_pixel != -1:
|
||||||
|
emit(output_file, count, pixel_count, last_pixel)
|
||||||
|
count = count + 2
|
||||||
|
pixel_count = 1
|
||||||
|
last_pixel = pixel
|
||||||
|
|
||||||
|
else:
|
||||||
|
pixel_count = pixel_count + 1
|
||||||
|
if pixel_count == 256:
|
||||||
|
emit(output_file, count, pixel_count-1, last_pixel)
|
||||||
|
count = count + 2
|
||||||
|
pixel_count = 1
|
||||||
|
last_pixel = pixel
|
||||||
|
|
||||||
|
emit(output_file, count, pixel_count, last_pixel)
|
||||||
|
output_file.write(", 0x00, 0x00\n}\n")
|
||||||
|
else:
|
||||||
|
parser.print_help()
|
827
src/rsrc/bitmaps/image.h
Normal file
827
src/rsrc/bitmaps/image.h
Normal file
|
@ -0,0 +1,827 @@
|
||||||
|
unsigned char splashscreen_lut[] = {
|
||||||
|
0x00, 0x00, 0xFF, 0x00,
|
||||||
|
0x08, 0x08, 0xFE, 0x00,
|
||||||
|
0x0B, 0x0B, 0xFD, 0x00,
|
||||||
|
0x5F, 0x5F, 0x00, 0x00,
|
||||||
|
0x60, 0x60, 0x00, 0x00,
|
||||||
|
0x61, 0x61, 0x00, 0x00,
|
||||||
|
0x62, 0x62, 0x00, 0x00,
|
||||||
|
0x63, 0x63, 0x00, 0x00,
|
||||||
|
0x64, 0x64, 0x00, 0x00,
|
||||||
|
0x65, 0x65, 0x00, 0x00,
|
||||||
|
0x66, 0x66, 0x00, 0x00,
|
||||||
|
0x67, 0x67, 0x00, 0x00,
|
||||||
|
0x68, 0x68, 0x00, 0x00,
|
||||||
|
0x69, 0x69, 0x00, 0x00,
|
||||||
|
0x6A, 0x6A, 0x00, 0x00,
|
||||||
|
0x6B, 0x6B, 0x00, 0x00,
|
||||||
|
0x6D, 0x6D, 0x00, 0x00,
|
||||||
|
0x6E, 0x6E, 0x00, 0x00,
|
||||||
|
0x29, 0x29, 0xF3, 0x00,
|
||||||
|
0x6F, 0x6F, 0x00, 0x00,
|
||||||
|
0x2A, 0x2A, 0xF3, 0x00,
|
||||||
|
0x70, 0x70, 0x00, 0x00,
|
||||||
|
0x71, 0x71, 0x00, 0x00,
|
||||||
|
0x72, 0x72, 0x00, 0x00,
|
||||||
|
0x73, 0x73, 0x00, 0x00,
|
||||||
|
0x77, 0x77, 0x00, 0x00,
|
||||||
|
0x78, 0x78, 0x00, 0x00,
|
||||||
|
0x79, 0x79, 0x00, 0x00,
|
||||||
|
0x7B, 0x7B, 0x00, 0x00,
|
||||||
|
0x7C, 0x7C, 0x00, 0x00,
|
||||||
|
0x7E, 0x7E, 0x00, 0x00,
|
||||||
|
0x80, 0x80, 0x00, 0x00,
|
||||||
|
0x80, 0x80, 0x01, 0x00,
|
||||||
|
0x81, 0x81, 0x02, 0x00,
|
||||||
|
0x80, 0x80, 0x06, 0x00,
|
||||||
|
0x81, 0x81, 0x0D, 0x00,
|
||||||
|
0x83, 0x83, 0x07, 0x00,
|
||||||
|
0x81, 0x81, 0x12, 0x00,
|
||||||
|
0x84, 0x84, 0x09, 0x00,
|
||||||
|
0x82, 0x82, 0x16, 0x00,
|
||||||
|
0x82, 0x82, 0x19, 0x00,
|
||||||
|
0x86, 0x86, 0x0F, 0x00,
|
||||||
|
0x83, 0x83, 0x1F, 0x00,
|
||||||
|
0x83, 0x83, 0x22, 0x00,
|
||||||
|
0x84, 0x84, 0x24, 0x00,
|
||||||
|
0x85, 0x85, 0x29, 0x00,
|
||||||
|
0x8A, 0x8A, 0x18, 0x00,
|
||||||
|
0x85, 0x85, 0x2B, 0x00,
|
||||||
|
0x8B, 0x8B, 0x1D, 0x00,
|
||||||
|
0x86, 0x86, 0x30, 0x00,
|
||||||
|
0x8C, 0x8C, 0x20, 0x00,
|
||||||
|
0x87, 0x87, 0x33, 0x00,
|
||||||
|
0x69, 0x69, 0x9E, 0x00,
|
||||||
|
0x6A, 0x6A, 0x9B, 0x00,
|
||||||
|
0x68, 0x68, 0xA2, 0x00,
|
||||||
|
0x6B, 0x6B, 0x99, 0x00,
|
||||||
|
0x6D, 0x6D, 0x94, 0x00,
|
||||||
|
0x6B, 0x6B, 0x9B, 0x00,
|
||||||
|
0x88, 0x88, 0x36, 0x00,
|
||||||
|
0x8E, 0x8E, 0x24, 0x00,
|
||||||
|
0x8F, 0x8F, 0x27, 0x00,
|
||||||
|
0x89, 0x89, 0x3C, 0x00,
|
||||||
|
0x90, 0x90, 0x29, 0x00,
|
||||||
|
0x90, 0x90, 0x2A, 0x00,
|
||||||
|
0x8A, 0x8A, 0x3F, 0x00,
|
||||||
|
0x8B, 0x8B, 0x41, 0x00,
|
||||||
|
0x92, 0x92, 0x2F, 0x00,
|
||||||
|
0x93, 0x93, 0x30, 0x00,
|
||||||
|
0x93, 0x93, 0x32, 0x00,
|
||||||
|
0x8D, 0x8D, 0x47, 0x00,
|
||||||
|
0x94, 0x94, 0x33, 0x00,
|
||||||
|
0x8E, 0x8E, 0x49, 0x00,
|
||||||
|
0x94, 0x94, 0x35, 0x00,
|
||||||
|
0x95, 0x95, 0x36, 0x00,
|
||||||
|
0x8F, 0x8F, 0x4C, 0x00,
|
||||||
|
0x8F, 0x8F, 0x4E, 0x00,
|
||||||
|
0x97, 0x97, 0x3B, 0x00,
|
||||||
|
0x6D, 0x80, 0x94, 0x00,
|
||||||
|
0x98, 0x98, 0x3F, 0x00,
|
||||||
|
0x92, 0x92, 0x54, 0x00,
|
||||||
|
0x6B, 0x80, 0x99, 0x00,
|
||||||
|
0x92, 0x92, 0x56, 0x00,
|
||||||
|
0x6A, 0x80, 0x9B, 0x00,
|
||||||
|
0x6B, 0x80, 0x9B, 0x00,
|
||||||
|
0x69, 0x80, 0x9E, 0x00,
|
||||||
|
0x93, 0x93, 0x58, 0x00,
|
||||||
|
0x68, 0x80, 0xA2, 0x00,
|
||||||
|
0x9A, 0x9A, 0x44, 0x00,
|
||||||
|
0x6D, 0xB3, 0x00, 0x00,
|
||||||
|
0x9B, 0x9B, 0x45, 0x00,
|
||||||
|
0x95, 0x95, 0x5C, 0x00,
|
||||||
|
0x6B, 0xB6, 0x00, 0x00,
|
||||||
|
0x6A, 0xB7, 0x00, 0x00,
|
||||||
|
0x6B, 0xB7, 0x00, 0x00,
|
||||||
|
0x69, 0xB9, 0x00, 0x00,
|
||||||
|
0xB3, 0xB3, 0x00, 0x00,
|
||||||
|
0x9E, 0x9E, 0x4D, 0x00,
|
||||||
|
0x98, 0x98, 0x62, 0x00,
|
||||||
|
0x9E, 0x9E, 0x4E, 0x00,
|
||||||
|
0x98, 0x98, 0x63, 0x00,
|
||||||
|
0x68, 0xBB, 0x00, 0x00,
|
||||||
|
0xB6, 0xB6, 0x00, 0x00,
|
||||||
|
0xB7, 0xB7, 0x00, 0x00,
|
||||||
|
0x9A, 0x9A, 0x66, 0x00,
|
||||||
|
0xB9, 0xB9, 0x00, 0x00,
|
||||||
|
0xA1, 0xA1, 0x54, 0x00,
|
||||||
|
0xA2, 0xA2, 0x57, 0x00,
|
||||||
|
0x9C, 0x9C, 0x6C, 0x00,
|
||||||
|
0xBB, 0xBB, 0x00, 0x00,
|
||||||
|
0x9D, 0x9D, 0x6D, 0x00,
|
||||||
|
0x29, 0x80, 0xF3, 0x00,
|
||||||
|
0x2A, 0x80, 0xF3, 0x00,
|
||||||
|
0x00, 0x80, 0xFF, 0x00,
|
||||||
|
0x0B, 0x80, 0xFD, 0x00,
|
||||||
|
0x08, 0x80, 0xFE, 0x00,
|
||||||
|
0x9F, 0x9F, 0x72, 0x00,
|
||||||
|
0xA7, 0xA7, 0x63, 0x00,
|
||||||
|
0xA2, 0xA2, 0x77, 0x00,
|
||||||
|
0xA8, 0xA8, 0x66, 0x00,
|
||||||
|
0xA4, 0xA4, 0x7C, 0x00,
|
||||||
|
0xAA, 0xAA, 0x6B, 0x00,
|
||||||
|
0xA7, 0xA7, 0x81, 0x00,
|
||||||
|
0xAC, 0xAC, 0x71, 0x00,
|
||||||
|
0xAE, 0xAE, 0x74, 0x00,
|
||||||
|
0xAA, 0xAA, 0x85, 0x00,
|
||||||
|
0xAC, 0xAC, 0x8A, 0x00,
|
||||||
|
0xB2, 0xB2, 0x7D, 0x00,
|
||||||
|
0xB2, 0xB2, 0x7E, 0x00,
|
||||||
|
0xAF, 0xAF, 0x8D, 0x00,
|
||||||
|
0x6D, 0xB3, 0x94, 0x00,
|
||||||
|
0xB5, 0xB5, 0x84, 0x00,
|
||||||
|
0xB1, 0xB1, 0x92, 0x00,
|
||||||
|
0xB5, 0xB5, 0x86, 0x00,
|
||||||
|
0x6B, 0xB6, 0x99, 0x00,
|
||||||
|
0x6A, 0xB7, 0x9B, 0x00,
|
||||||
|
0x6B, 0xB7, 0x9B, 0x00,
|
||||||
|
0xB3, 0xB3, 0x95, 0x00,
|
||||||
|
0xB7, 0xB7, 0x8A, 0x00,
|
||||||
|
0x69, 0xB9, 0x9E, 0x00,
|
||||||
|
0xB6, 0xB6, 0x99, 0x00,
|
||||||
|
0xB9, 0xB9, 0x8F, 0x00,
|
||||||
|
0x68, 0xBB, 0xA2, 0x00,
|
||||||
|
0xBB, 0xBB, 0x92, 0x00,
|
||||||
|
0xB8, 0xB8, 0x9D, 0x00,
|
||||||
|
0x2A, 0xF5, 0x00, 0x00,
|
||||||
|
0x29, 0xF6, 0x00, 0x00,
|
||||||
|
0xBC, 0xBC, 0x96, 0x00,
|
||||||
|
0xBA, 0xBA, 0xA0, 0x00,
|
||||||
|
0xBB, 0xBB, 0xA1, 0x00,
|
||||||
|
0xBC, 0xBC, 0xA3, 0x00,
|
||||||
|
0x08, 0xFE, 0x00, 0x00,
|
||||||
|
0x0B, 0xFE, 0x00, 0x00,
|
||||||
|
0x00, 0xFF, 0x00, 0x00,
|
||||||
|
0xC0, 0xC0, 0x9E, 0x00,
|
||||||
|
0xBE, 0xBE, 0xA6, 0x00,
|
||||||
|
0xC1, 0xC1, 0xA1, 0x00,
|
||||||
|
0xBF, 0xBF, 0xA8, 0x00,
|
||||||
|
0xC2, 0xC2, 0xA2, 0x00,
|
||||||
|
0xC0, 0xC0, 0xA9, 0x00,
|
||||||
|
0xC2, 0xC2, 0xA4, 0x00,
|
||||||
|
0xC1, 0xC1, 0xAA, 0x00,
|
||||||
|
0xC4, 0xC4, 0xA8, 0x00,
|
||||||
|
0xC3, 0xC3, 0xAD, 0x00,
|
||||||
|
0xC3, 0xC3, 0xAE, 0x00,
|
||||||
|
0xF5, 0xF5, 0x00, 0x00,
|
||||||
|
0xC5, 0xC5, 0xAA, 0x00,
|
||||||
|
0xF6, 0xF6, 0x00, 0x00,
|
||||||
|
0xC4, 0xC4, 0xAF, 0x00,
|
||||||
|
0xC5, 0xC5, 0xB0, 0x00,
|
||||||
|
0xC6, 0xC6, 0xAD, 0x00,
|
||||||
|
0xC5, 0xC5, 0xB1, 0x00,
|
||||||
|
0xC6, 0xC6, 0xB2, 0x00,
|
||||||
|
0xC7, 0xC7, 0xAF, 0x00,
|
||||||
|
0xC7, 0xC7, 0xB3, 0x00,
|
||||||
|
0xC8, 0xC8, 0xB0, 0x00,
|
||||||
|
0xC8, 0xC8, 0xB2, 0x00,
|
||||||
|
0xC8, 0xC8, 0xB4, 0x00,
|
||||||
|
0xC8, 0xC8, 0xB5, 0x00,
|
||||||
|
0xC9, 0xC9, 0xB3, 0x00,
|
||||||
|
0xC9, 0xC9, 0xB6, 0x00,
|
||||||
|
0xC9, 0xC9, 0xB7, 0x00,
|
||||||
|
0xFE, 0xFE, 0x00, 0x00,
|
||||||
|
0xCA, 0xCA, 0xB6, 0x00,
|
||||||
|
0xCA, 0xCA, 0xB7, 0x00,
|
||||||
|
0xCA, 0xCA, 0xB8, 0x00,
|
||||||
|
0xFF, 0xFF, 0x00, 0x00,
|
||||||
|
0xCB, 0xCB, 0xB8, 0x00,
|
||||||
|
0xCB, 0xCB, 0xB9, 0x00,
|
||||||
|
0xCB, 0xCB, 0xBA, 0x00,
|
||||||
|
0xCC, 0xCC, 0xB9, 0x00,
|
||||||
|
0xCC, 0xCC, 0xBA, 0x00,
|
||||||
|
0xCC, 0xCC, 0xBB, 0x00,
|
||||||
|
0xCD, 0xCD, 0xBB, 0x00,
|
||||||
|
0xCD, 0xCD, 0xBC, 0x00,
|
||||||
|
0x2A, 0xF5, 0xF3, 0x00,
|
||||||
|
0x29, 0xF6, 0xF3, 0x00,
|
||||||
|
0x0B, 0xFE, 0xFD, 0x00,
|
||||||
|
0x08, 0xFE, 0xFE, 0x00,
|
||||||
|
0x00, 0xFF, 0xFF, 0x00,
|
||||||
|
0xFF, 0xFF, 0xFF, 0x00,
|
||||||
|
0xC8, 0xC8, 0xC8, 0x00,
|
||||||
|
0xC9, 0xC9, 0xC9, 0x00,
|
||||||
|
0xCA, 0xCA, 0xCA, 0x00,
|
||||||
|
0xCB, 0xCB, 0xCB, 0x00,
|
||||||
|
0xCC, 0xCC, 0xCC, 0x00,
|
||||||
|
0xCD, 0xCD, 0xCD, 0x00,
|
||||||
|
0xCE, 0xCE, 0xCE, 0x00,
|
||||||
|
0xCF, 0xCF, 0xCF, 0x00,
|
||||||
|
0xD0, 0xD0, 0xD0, 0x00,
|
||||||
|
0xD1, 0xD1, 0xD1, 0x00,
|
||||||
|
0xD2, 0xD2, 0xD2, 0x00,
|
||||||
|
0xD3, 0xD3, 0xD3, 0x00,
|
||||||
|
0xD4, 0xD4, 0xD4, 0x00,
|
||||||
|
0xD5, 0xD5, 0xD5, 0x00,
|
||||||
|
0xD6, 0xD6, 0xD6, 0x00,
|
||||||
|
0xD7, 0xD7, 0xD7, 0x00,
|
||||||
|
0xD8, 0xD8, 0xD8, 0x00,
|
||||||
|
0xD9, 0xD9, 0xD9, 0x00,
|
||||||
|
0xDA, 0xDA, 0xDA, 0x00,
|
||||||
|
0xDB, 0xDB, 0xDB, 0x00,
|
||||||
|
0xDC, 0xDC, 0xDC, 0x00,
|
||||||
|
0xDD, 0xDD, 0xDD, 0x00,
|
||||||
|
0xDE, 0xDE, 0xDE, 0x00,
|
||||||
|
0xDF, 0xDF, 0xDF, 0x00,
|
||||||
|
0xE0, 0xE0, 0xE0, 0x00,
|
||||||
|
0xE1, 0xE1, 0xE1, 0x00,
|
||||||
|
0xE2, 0xE2, 0xE2, 0x00,
|
||||||
|
0xE3, 0xE3, 0xE3, 0x00,
|
||||||
|
0xE4, 0xE4, 0xE4, 0x00,
|
||||||
|
0xE5, 0xE5, 0xE5, 0x00,
|
||||||
|
0xE6, 0xE6, 0xE6, 0x00,
|
||||||
|
0xE7, 0xE7, 0xE7, 0x00,
|
||||||
|
0xE8, 0xE8, 0xE8, 0x00,
|
||||||
|
0xE9, 0xE9, 0xE9, 0x00,
|
||||||
|
0xEA, 0xEA, 0xEA, 0x00,
|
||||||
|
0xEB, 0xEB, 0xEB, 0x00,
|
||||||
|
0xEC, 0xEC, 0xEC, 0x00,
|
||||||
|
0xED, 0xED, 0xED, 0x00,
|
||||||
|
0xEE, 0xEE, 0xEE, 0x00,
|
||||||
|
0xEF, 0xEF, 0xEF, 0x00,
|
||||||
|
0xF0, 0xF0, 0xF0, 0x00,
|
||||||
|
0xF1, 0xF1, 0xF1, 0x00,
|
||||||
|
0xF2, 0xF2, 0xF2, 0x00,
|
||||||
|
0xF3, 0xF3, 0xF3, 0x00,
|
||||||
|
0xF4, 0xF4, 0xF4, 0x00,
|
||||||
|
0xF5, 0xF5, 0xF5, 0x00,
|
||||||
|
0xF6, 0xF6, 0xF6, 0x00,
|
||||||
|
0xF7, 0xF7, 0xF7, 0x00,
|
||||||
|
0xF8, 0xF8, 0xF8, 0x00,
|
||||||
|
0xF9, 0xF9, 0xF9, 0x00,
|
||||||
|
0xFA, 0xFA, 0xFA, 0x00,
|
||||||
|
0xFB, 0xFB, 0xFB, 0x00,
|
||||||
|
0xFC, 0xFC, 0xFC, 0x00,
|
||||||
|
0xFD, 0xFD, 0xFD, 0x00,
|
||||||
|
0xFE, 0xFE, 0xFE, 0x00,
|
||||||
|
0xFF, 0xFF, 0xFF, 0x00,
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned char splashscreen_pix[] = {
|
||||||
|
0x00, 0x-1, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0x62, 0x1F, 0x01, 0xC7, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0x81, 0x1F, 0x03, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x01, 0xC7, 0x2B, 0x1F,
|
||||||
|
0x04, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x02, 0xC7, 0x28, 0x1F, 0x06, 0xC7, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0x54, 0x1F, 0x04, 0xC7, 0x24, 0x1F, 0x08, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F,
|
||||||
|
0x06, 0xC7, 0x20, 0x1F, 0x0A, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x07, 0xC7, 0x1E, 0x1F,
|
||||||
|
0x0B, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x55, 0x1F, 0x08, 0xC7, 0x1A, 0x1F, 0x0D, 0xC7, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0x57, 0x1F, 0x07, 0xC7, 0x17, 0x1F, 0x0F, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x59, 0x1F,
|
||||||
|
0x07, 0xC7, 0x13, 0x1F, 0x11, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x5B, 0x1F, 0x07, 0xC7, 0x10, 0x1F,
|
||||||
|
0x12, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x5C, 0x1F, 0x07, 0xC7, 0x0D, 0x1F, 0x13, 0xC7, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0x5F, 0x1F, 0x07, 0xC7, 0x09, 0x1F, 0x13, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x63, 0x1F,
|
||||||
|
0x07, 0xC7, 0x05, 0x1F, 0x14, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x65, 0x1F, 0x07, 0xC7, 0x02, 0x1F,
|
||||||
|
0x14, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x69, 0x1F, 0x19, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x6D, 0x1F,
|
||||||
|
0x15, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x6F, 0x1F, 0x13, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x6F, 0x1F,
|
||||||
|
0x14, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x6F, 0x1F, 0x13, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x6F, 0x1F,
|
||||||
|
0x13, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x6F, 0x1F, 0x13, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x6F, 0x1F,
|
||||||
|
0x17, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x6B, 0x1F, 0x1A, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x69, 0x1F,
|
||||||
|
0x13, 0xC7, 0x03, 0x1F, 0x07, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x65, 0x1F, 0x13, 0xC7, 0x07, 0x1F,
|
||||||
|
0x07, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x61, 0x1F, 0x13, 0xC7, 0x0A, 0x1F, 0x07, 0xC7, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0x5F, 0x1F, 0x13, 0xC7, 0x0D, 0x1F, 0x07, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x5D, 0x1F,
|
||||||
|
0x11, 0xC7, 0x10, 0x1F, 0x08, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x5B, 0x1F, 0x0F, 0xC7, 0x14, 0x1F,
|
||||||
|
0x07, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x5A, 0x1F, 0x0D, 0xC7, 0x18, 0x1F, 0x07, 0xC7, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0x58, 0x1F, 0x0C, 0xC7, 0x1A, 0x1F, 0x08, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x56, 0x1F,
|
||||||
|
0x0A, 0xC7, 0x1E, 0x1F, 0x07, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x55, 0x1F, 0x08, 0xC7, 0x22, 0x1F,
|
||||||
|
0x06, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x06, 0xC7, 0x25, 0x1F, 0x05, 0xC7, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0x54, 0x1F, 0x04, 0xC7, 0x29, 0x1F, 0x03, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F,
|
||||||
|
0x03, 0xC7, 0x2B, 0x1F, 0x02, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x01, 0xC7, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0x13, 0x1F, 0x30, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x30, 0xC7, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0x54, 0x1F, 0x30, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x30, 0xC7, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0x54, 0x1F, 0x30, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x30, 0xC7, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0x54, 0x1F, 0x30, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x30, 0xC7, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0x54, 0x1F, 0x30, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x30, 0xC7, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0x72, 0x1F, 0x30, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x30, 0xC7, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0x54, 0x1F, 0x30, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x30, 0xC7, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0x78, 0x1F, 0x0C, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x76, 0x1F, 0x0E, 0xC7, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0x74, 0x1F, 0x10, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x72, 0x1F, 0x12, 0xC7, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0x71, 0x1F, 0x12, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x70, 0x1F, 0x12, 0xC7, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0x70, 0x1F, 0x12, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x70, 0x1F, 0x13, 0xC7, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0x6F, 0x1F, 0x13, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x70, 0x1F, 0x12, 0xC7, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0x70, 0x1F, 0x12, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x70, 0x1F, 0x12, 0xC7, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0x70, 0x1F, 0x12, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x70, 0x1F, 0x13, 0xC7, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0x6F, 0x1F, 0x13, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x70, 0x1F, 0x12, 0xC7, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0x70, 0x1F, 0x12, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x70, 0x1F, 0x12, 0xC7, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0x70, 0x1F, 0x12, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x70, 0x1F, 0x13, 0xC7, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0x70, 0x1F, 0x12, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x72, 0x1F, 0x10, 0xC7, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0x74, 0x1F, 0x0E, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x76, 0x1F, 0x0C, 0xC7, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0x78, 0x1F, 0x30, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x30, 0xC7, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0x54, 0x1F, 0x30, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x30, 0xC7, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0x10, 0x1F, 0x04, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x80, 0x1F, 0x04, 0xC7, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0x54, 0x1F, 0x04, 0xC7, 0x28, 0x1F, 0x04, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x04, 0xC7,
|
||||||
|
0x28, 0x1F, 0x04, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x04, 0xC7, 0x28, 0x1F, 0x04, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x04, 0xC7, 0x0F, 0x1F, 0x04, 0xC7, 0x15, 0x1F, 0x04, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x04, 0xC7, 0x0F, 0x1F, 0x04, 0xC7, 0x15, 0x1F, 0x04, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x04, 0xC7, 0x0F, 0x1F, 0x04, 0xC7, 0x15, 0x1F, 0x04, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x04, 0xC7, 0x0F, 0x1F, 0x04, 0xC7, 0x15, 0x1F, 0x04, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x04, 0xC7, 0x0F, 0x1F, 0x04, 0xC7, 0x15, 0x1F, 0x04, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x04, 0xC7, 0x0F, 0x1F, 0x04, 0xC7, 0x15, 0x1F, 0x04, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x04, 0xC7, 0x0F, 0x1F, 0x04, 0xC7, 0x15, 0x1F, 0x04, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x04, 0xC7, 0x0F, 0x1F, 0x04, 0xC7, 0x15, 0x1F, 0x04, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x04, 0xC7, 0x0F, 0x1F, 0x04, 0xC7, 0x15, 0x1F, 0x04, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x04, 0xC7, 0x0F, 0x1F, 0x04, 0xC7, 0x15, 0x1F, 0x04, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x04, 0xC7, 0x0F, 0x1F, 0x04, 0xC7, 0x15, 0x1F, 0x04, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x04, 0xC7, 0x0F, 0x1F, 0x04, 0xC7, 0x15, 0x1F, 0x04, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x04, 0xC7, 0x0F, 0x1F, 0x04, 0xC7, 0x15, 0x1F, 0x04, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x04, 0xC7, 0x0F, 0x1F, 0x04, 0xC7, 0x15, 0x1F, 0x04, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x04, 0xC7, 0x0F, 0x1F, 0x04, 0xC7, 0x15, 0x1F, 0x04, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x30, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x30, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x30, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x30, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x30, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x30, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x30, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x30, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x30, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x30, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0x79, 0x1F, 0x0E, 0xC7, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0x72, 0x1F, 0x17, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x6A, 0x1F, 0x1D, 0xC7, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0x65, 0x1F, 0x21, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x61, 0x1F, 0x24, 0xC7, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0x5F, 0x1F, 0x26, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x5D, 0x1F, 0x28, 0xC7, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0x5B, 0x1F, 0x2A, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x59, 0x1F, 0x2C, 0xC7, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0x57, 0x1F, 0x2D, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x57, 0x1F, 0x2E, 0xC7, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0x55, 0x1F, 0x0D, 0xC7, 0x17, 0x1F, 0x0B, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x55, 0x1F, 0x08, 0xC7,
|
||||||
|
0x20, 0x1F, 0x08, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x06, 0xC7, 0x25, 0x1F, 0x05, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x53, 0x1F, 0x05, 0xC7, 0x28, 0x1F, 0x04, 0xC7, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0x53, 0x1F, 0x04, 0xC7, 0x2A, 0x1F, 0x04, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x52, 0x1F, 0x04, 0xC7,
|
||||||
|
0x2A, 0x1F, 0x04, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x52, 0x1F, 0x03, 0xC7, 0x2C, 0x1F, 0x03, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x52, 0x1F, 0x03, 0xC7, 0x2C, 0x1F, 0x03, 0xC7, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0x52, 0x1F, 0x03, 0xC7, 0x2C, 0x1F, 0x03, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x52, 0x1F, 0x03, 0xC7,
|
||||||
|
0x2C, 0x1F, 0x03, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x52, 0x1F, 0x03, 0xC7, 0x2C, 0x1F, 0x03, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x52, 0x1F, 0x04, 0xC7, 0x2A, 0x1F, 0x04, 0xC7, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0x52, 0x1F, 0x04, 0xC7, 0x2A, 0x1F, 0x04, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x52, 0x1F, 0x05, 0xC7,
|
||||||
|
0x28, 0x1F, 0x05, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x53, 0x1F, 0x05, 0xC7, 0x26, 0x1F, 0x05, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x08, 0xC7, 0x20, 0x1F, 0x08, 0xC7, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0x54, 0x1F, 0x0C, 0xC7, 0x18, 0x1F, 0x0C, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x55, 0x1F, 0x2E, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x56, 0x1F, 0x2E, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x57, 0x1F, 0x2C, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x59, 0x1F, 0x2A, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x5B, 0x1F, 0x28, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x5D, 0x1F, 0x26, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x5F, 0x1F, 0x24, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x62, 0x1F, 0x20, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x65, 0x1F, 0x1D, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x6A, 0x1F, 0x18, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x71, 0x1F, 0x0E, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xE9, 0x1F, 0x04, 0xC7, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0x80, 0x1F, 0x04, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x80, 0x1F, 0x04, 0xC7, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0x80, 0x1F, 0x04, 0xC7, 0x11, 0x1F, 0x04, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x6B, 0x1F, 0x04, 0xC7,
|
||||||
|
0x11, 0x1F, 0x04, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x6B, 0x1F, 0x04, 0xC7, 0x11, 0x1F, 0x04, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x6B, 0x1F, 0x04, 0xC7, 0x11, 0x1F, 0x04, 0xC7, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0x6B, 0x1F, 0x04, 0xC7, 0x11, 0x1F, 0x04, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x6B, 0x1F, 0x04, 0xC7,
|
||||||
|
0x11, 0x1F, 0x04, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x6B, 0x1F, 0x04, 0xC7, 0x11, 0x1F, 0x04, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x6B, 0x1F, 0x04, 0xC7, 0x11, 0x1F, 0x04, 0xC7, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0x6B, 0x1F, 0x04, 0xC7, 0x11, 0x1F, 0x04, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x6B, 0x1F, 0x04, 0xC7,
|
||||||
|
0x11, 0x1F, 0x04, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x6B, 0x1F, 0x04, 0xC7, 0x11, 0x1F, 0x04, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x6B, 0x1F, 0x04, 0xC7, 0x11, 0x1F, 0x04, 0xC7, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0x6B, 0x1F, 0x04, 0xC7, 0x11, 0x1F, 0x04, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x6B, 0x1F, 0x04, 0xC7,
|
||||||
|
0x11, 0x1F, 0x04, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x6B, 0x1F, 0x04, 0xC7, 0x11, 0x1F, 0x04, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x6B, 0x1F, 0x30, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x30, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x30, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x30, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x30, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x30, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x30, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x30, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x30, 0xC7, 0xFF, 0x12, 0xFF, 0x12, 0x54, 0x1F, 0x30, 0xC7,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0x79, 0x1F, 0x01, 0x38, 0x01, 0x12, 0x4C, 0x00, 0x01, 0x12,
|
||||||
|
0x01, 0x39, 0xFF, 0x12, 0xFF, 0x12, 0x34, 0x1F, 0x01, 0x14, 0x4E, 0x00, 0x01, 0x02, 0x01, 0x34,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x33, 0x1F, 0x01, 0x14, 0x4F, 0x00, 0x01, 0x02, 0x01, 0x34, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0x32, 0x1F, 0x01, 0x38, 0x01, 0x12, 0x4F, 0x00, 0x01, 0x02, 0x01, 0x34, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0x7E, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0x7E, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0x7E, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0x7E, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0x2D, 0x1F, 0x01, 0x4D, 0x01, 0x6E, 0x48, 0x70, 0x01, 0x6E, 0x01, 0x53, 0x05, 0x1F,
|
||||||
|
0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x12, 0x5C, 0x1F, 0x05, 0xC7,
|
||||||
|
0x0D, 0x1F, 0x0D, 0xC7, 0x09, 0x1F, 0x10, 0xC7, 0x08, 0x1F, 0x0D, 0xC7, 0x0A, 0x1F, 0x0D, 0xC7,
|
||||||
|
0x14, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x45, 0x1F, 0x01, 0x6F, 0x4A, 0x70, 0x01, 0x71,
|
||||||
|
0x01, 0x54, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x12,
|
||||||
|
0x5B, 0x1F, 0x05, 0xC7, 0x0C, 0x1F, 0x0F, 0xC7, 0x07, 0x1F, 0x11, 0xC7, 0x07, 0x1F, 0x0F, 0xC7,
|
||||||
|
0x08, 0x1F, 0x0F, 0xC7, 0x13, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x45, 0x1F, 0x01, 0x6F,
|
||||||
|
0x4B, 0x70, 0x01, 0x71, 0x01, 0x54, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01,
|
||||||
|
0x01, 0x36, 0xFF, 0x12, 0x5A, 0x1F, 0x05, 0xC7, 0x0B, 0x1F, 0x11, 0xC7, 0x06, 0x1F, 0x11, 0xC7,
|
||||||
|
0x06, 0x1F, 0x11, 0xC7, 0x06, 0x1F, 0x11, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7,
|
||||||
|
0x45, 0x1F, 0x01, 0x4D, 0x01, 0x6E, 0x4B, 0x70, 0x01, 0x71, 0x01, 0x54, 0x05, 0x1F, 0x01, 0x35,
|
||||||
|
0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x12, 0x58, 0x1F, 0x07, 0xC7, 0x0A, 0x1F,
|
||||||
|
0x11, 0xC7, 0x06, 0x1F, 0x11, 0xC7, 0x06, 0x1F, 0x11, 0xC7, 0x06, 0x1F, 0x11, 0xC7, 0x12, 0x1F,
|
||||||
|
0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x8E, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72,
|
||||||
|
0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x12,
|
||||||
|
0x57, 0x1F, 0x07, 0xC7, 0x0A, 0x1F, 0x11, 0xC7, 0x06, 0x1F, 0x11, 0xC7, 0x06, 0x1F, 0x11, 0xC7,
|
||||||
|
0x06, 0x1F, 0x11, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x8F, 0x1F, 0x01, 0x52,
|
||||||
|
0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00,
|
||||||
|
0x01, 0x01, 0x01, 0x36, 0xFF, 0x12, 0x56, 0x1F, 0x07, 0xC7, 0x0A, 0x1F, 0x05, 0xC7, 0x07, 0x1F,
|
||||||
|
0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F,
|
||||||
|
0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x90, 0x1F,
|
||||||
|
0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02,
|
||||||
|
0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x12, 0x55, 0x1F, 0x07, 0xC7, 0x0A, 0x1F, 0x05, 0xC7,
|
||||||
|
0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7,
|
||||||
|
0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7,
|
||||||
|
0x91, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35,
|
||||||
|
0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x12, 0x54, 0x1F, 0x03, 0xC7, 0x01, 0x1F,
|
||||||
|
0x03, 0xC7, 0x0A, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x12, 0x1F,
|
||||||
|
0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F,
|
||||||
|
0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x45, 0x1F, 0x01, 0x81, 0x01, 0xC3, 0x44, 0xC6, 0x01, 0xC3,
|
||||||
|
0x01, 0x87, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F,
|
||||||
|
0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x12, 0x53, 0x1F, 0x03, 0xC7,
|
||||||
|
0x01, 0x1F, 0x03, 0xC7, 0x0A, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7,
|
||||||
|
0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7,
|
||||||
|
0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x45, 0x1F, 0x01, 0xC2, 0x46, 0xC6, 0x01, 0xC4,
|
||||||
|
0x01, 0x8A, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F,
|
||||||
|
0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x12, 0x51, 0x1F, 0x04, 0xC7,
|
||||||
|
0x01, 0x1F, 0x04, 0xC7, 0x09, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7,
|
||||||
|
0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7,
|
||||||
|
0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x45, 0x1F, 0x01, 0xC2, 0x47, 0xC6, 0x01, 0xC4,
|
||||||
|
0x01, 0x8A, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F,
|
||||||
|
0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x12, 0x50, 0x1F, 0x04, 0xC7,
|
||||||
|
0x01, 0x1F, 0x04, 0xC7, 0x09, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7,
|
||||||
|
0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7,
|
||||||
|
0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x45, 0x1F, 0x01, 0x81, 0x01, 0xC3, 0x47, 0xC6,
|
||||||
|
0x01, 0xC4, 0x01, 0x8A, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56,
|
||||||
|
0x05, 0x1F, 0x01, 0x34, 0x01, 0x02, 0x03, 0x00, 0x01, 0x02, 0x01, 0x34, 0xFF, 0x12, 0x4F, 0x1F,
|
||||||
|
0x04, 0xC7, 0x01, 0x1F, 0x04, 0xC7, 0x09, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F,
|
||||||
|
0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F,
|
||||||
|
0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x8A, 0x1F, 0x01, 0x86, 0x01, 0xC4,
|
||||||
|
0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72,
|
||||||
|
0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x12,
|
||||||
|
0x4E, 0x1F, 0x04, 0xC7, 0x01, 0x1F, 0x04, 0xC7, 0x09, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7,
|
||||||
|
0x06, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7,
|
||||||
|
0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x8B, 0x1F, 0x01, 0x86,
|
||||||
|
0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70,
|
||||||
|
0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36,
|
||||||
|
0xFF, 0x12, 0x4D, 0x1F, 0x04, 0xC7, 0x01, 0x1F, 0x04, 0xC7, 0x09, 0x1F, 0x05, 0xC7, 0x06, 0x1F,
|
||||||
|
0x06, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F,
|
||||||
|
0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x8C, 0x1F, 0x01, 0x86, 0x01, 0xC4,
|
||||||
|
0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72,
|
||||||
|
0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x12,
|
||||||
|
0x4B, 0x1F, 0x05, 0xC7, 0x01, 0x1F, 0x05, 0xC7, 0x13, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7,
|
||||||
|
0x12, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7,
|
||||||
|
0x07, 0x1F, 0x05, 0xC7, 0x8D, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D,
|
||||||
|
0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35,
|
||||||
|
0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x12, 0x4A, 0x1F, 0x04, 0xC7, 0x02, 0x1F,
|
||||||
|
0x05, 0xC7, 0x12, 0x1F, 0x06, 0xC7, 0x07, 0x1F, 0x0F, 0xC7, 0x08, 0x1F, 0x05, 0xC7, 0x12, 0x1F,
|
||||||
|
0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x45, 0x1F,
|
||||||
|
0x01, 0x58, 0x01, 0x91, 0x40, 0x98, 0x01, 0x91, 0x01, 0x5D, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4,
|
||||||
|
0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72,
|
||||||
|
0x01, 0x56, 0x05, 0x1F, 0x01, 0x34, 0x01, 0x02, 0x03, 0x00, 0x01, 0x02, 0x01, 0x34, 0xFF, 0x12,
|
||||||
|
0x49, 0x1F, 0x04, 0xC7, 0x03, 0x1F, 0x04, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x08, 0x1F, 0x10, 0xC7,
|
||||||
|
0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7,
|
||||||
|
0x07, 0x1F, 0x05, 0xC7, 0x45, 0x1F, 0x01, 0x90, 0x42, 0x98, 0x01, 0x97, 0x01, 0x5E, 0x05, 0x1F,
|
||||||
|
0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71,
|
||||||
|
0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01,
|
||||||
|
0x01, 0x36, 0xFF, 0x12, 0x48, 0x1F, 0x04, 0xC7, 0x03, 0x1F, 0x04, 0xC7, 0x11, 0x1F, 0x06, 0xC7,
|
||||||
|
0x08, 0x1F, 0x11, 0xC7, 0x06, 0x1F, 0x0F, 0xC7, 0x08, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7,
|
||||||
|
0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x45, 0x1F, 0x01, 0x90, 0x43, 0x98, 0x01, 0x97,
|
||||||
|
0x01, 0x5E, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F,
|
||||||
|
0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02,
|
||||||
|
0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x12, 0x47, 0x1F, 0x04, 0xC7, 0x03, 0x1F, 0x04, 0xC7,
|
||||||
|
0x11, 0x1F, 0x05, 0xC7, 0x09, 0x1F, 0x11, 0xC7, 0x06, 0x1F, 0x10, 0xC7, 0x07, 0x1F, 0x05, 0xC7,
|
||||||
|
0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x45, 0x1F, 0x01, 0x58,
|
||||||
|
0x01, 0x91, 0x43, 0x98, 0x01, 0x97, 0x01, 0x5E, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6,
|
||||||
|
0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56,
|
||||||
|
0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x12, 0x46, 0x1F,
|
||||||
|
0x04, 0xC7, 0x03, 0x1F, 0x04, 0xC7, 0x10, 0x1F, 0x06, 0xC7, 0x09, 0x1F, 0x11, 0xC7, 0x06, 0x1F,
|
||||||
|
0x11, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F,
|
||||||
|
0x05, 0xC7, 0x86, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F,
|
||||||
|
0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71,
|
||||||
|
0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01,
|
||||||
|
0x01, 0x36, 0xFF, 0x12, 0x44, 0x1F, 0x05, 0xC7, 0x03, 0x1F, 0x05, 0xC7, 0x0F, 0x1F, 0x05, 0xC7,
|
||||||
|
0x16, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x11, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7,
|
||||||
|
0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x87, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98,
|
||||||
|
0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D,
|
||||||
|
0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35,
|
||||||
|
0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x12, 0x43, 0x1F, 0x05, 0xC7, 0x03, 0x1F,
|
||||||
|
0x05, 0xC7, 0x0E, 0x1F, 0x06, 0xC7, 0x16, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x11, 0xC7, 0x06, 0x1F,
|
||||||
|
0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x88, 0x1F,
|
||||||
|
0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4,
|
||||||
|
0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72,
|
||||||
|
0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x12,
|
||||||
|
0x42, 0x1F, 0x05, 0xC7, 0x03, 0x1F, 0x05, 0xC7, 0x0E, 0x1F, 0x05, 0xC7, 0x17, 0x1F, 0x05, 0xC7,
|
||||||
|
0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7,
|
||||||
|
0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x89, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98,
|
||||||
|
0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D,
|
||||||
|
0x05, 0x1F, 0x01, 0x54, 0x01, 0x71, 0x03, 0x70, 0x01, 0x71, 0x01, 0x54, 0x05, 0x1F, 0x01, 0x35,
|
||||||
|
0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x12, 0x41, 0x1F, 0x05, 0xC7, 0x03, 0x1F,
|
||||||
|
0x05, 0xC7, 0x0D, 0x1F, 0x06, 0xC7, 0x17, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F,
|
||||||
|
0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F,
|
||||||
|
0x05, 0xC7, 0x45, 0x1F, 0x01, 0x5F, 0x01, 0xA6, 0x3C, 0xB9, 0x01, 0xA6, 0x01, 0x66, 0x05, 0x1F,
|
||||||
|
0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4,
|
||||||
|
0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72,
|
||||||
|
0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x12,
|
||||||
|
0x40, 0x1F, 0x04, 0xC7, 0x05, 0x1F, 0x04, 0xC7, 0x0D, 0x1F, 0x05, 0xC7, 0x18, 0x1F, 0x05, 0xC7,
|
||||||
|
0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7,
|
||||||
|
0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x45, 0x1F, 0x01, 0xA4, 0x3E, 0xB9, 0x01, 0xB5,
|
||||||
|
0x01, 0x68, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F,
|
||||||
|
0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71,
|
||||||
|
0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01,
|
||||||
|
0x01, 0x36, 0xFF, 0x12, 0x3E, 0x1F, 0x05, 0xC7, 0x05, 0x1F, 0x05, 0xC7, 0x0B, 0x1F, 0x06, 0xC7,
|
||||||
|
0x18, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7,
|
||||||
|
0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x45, 0x1F, 0x01, 0xA4,
|
||||||
|
0x3F, 0xB9, 0x01, 0xB5, 0x01, 0x68, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96,
|
||||||
|
0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F,
|
||||||
|
0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02,
|
||||||
|
0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x12, 0x3D, 0x1F, 0x05, 0xC7, 0x05, 0x1F, 0x05, 0xC7,
|
||||||
|
0x0A, 0x1F, 0x06, 0xC7, 0x19, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7,
|
||||||
|
0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7,
|
||||||
|
0x45, 0x1F, 0x01, 0x5F, 0x01, 0xA6, 0x3F, 0xB9, 0x01, 0xB5, 0x01, 0x68, 0x05, 0x1F, 0x01, 0x5C,
|
||||||
|
0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6,
|
||||||
|
0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56,
|
||||||
|
0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x12, 0x3C, 0x1F,
|
||||||
|
0x0F, 0xC7, 0x0A, 0x1F, 0x06, 0xC7, 0x0D, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F,
|
||||||
|
0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F,
|
||||||
|
0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x82, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5,
|
||||||
|
0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F,
|
||||||
|
0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x54, 0x01, 0x71,
|
||||||
|
0x03, 0x70, 0x01, 0x71, 0x01, 0x54, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01,
|
||||||
|
0x01, 0x36, 0xFF, 0x12, 0x3B, 0x1F, 0x0F, 0xC7, 0x09, 0x1F, 0x06, 0xC7, 0x0E, 0x1F, 0x05, 0xC7,
|
||||||
|
0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7,
|
||||||
|
0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x83, 0x1F, 0x01, 0x66,
|
||||||
|
0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98,
|
||||||
|
0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D,
|
||||||
|
0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35,
|
||||||
|
0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x12, 0x3A, 0x1F, 0x0F, 0xC7, 0x09, 0x1F,
|
||||||
|
0x06, 0xC7, 0x0E, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F,
|
||||||
|
0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F,
|
||||||
|
0x05, 0xC7, 0x84, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F,
|
||||||
|
0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4,
|
||||||
|
0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72,
|
||||||
|
0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x12,
|
||||||
|
0x39, 0x1F, 0x10, 0xC7, 0x07, 0x1F, 0x06, 0xC7, 0x0F, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7,
|
||||||
|
0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7,
|
||||||
|
0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x85, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9,
|
||||||
|
0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64,
|
||||||
|
0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52,
|
||||||
|
0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00,
|
||||||
|
0x01, 0x01, 0x01, 0x36, 0xFF, 0x12, 0x37, 0x1F, 0x11, 0xC7, 0x07, 0x1F, 0x06, 0xC7, 0x0F, 0x1F,
|
||||||
|
0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F,
|
||||||
|
0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x86, 0x1F,
|
||||||
|
0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97,
|
||||||
|
0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5,
|
||||||
|
0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F,
|
||||||
|
0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x12, 0x36, 0x1F, 0x05, 0xC7,
|
||||||
|
0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x06, 0xC7, 0x10, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7,
|
||||||
|
0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7,
|
||||||
|
0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x87, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9,
|
||||||
|
0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64,
|
||||||
|
0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52,
|
||||||
|
0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00,
|
||||||
|
0x01, 0x01, 0x01, 0x36, 0xFF, 0x12, 0x35, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F,
|
||||||
|
0x06, 0xC7, 0x10, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F,
|
||||||
|
0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F,
|
||||||
|
0x05, 0xC7, 0x67, 0x1F, 0x01, 0x40, 0x01, 0x8F, 0x01, 0x93, 0x01, 0x47, 0x1D, 0x1F, 0x01, 0x66,
|
||||||
|
0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98,
|
||||||
|
0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D,
|
||||||
|
0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35,
|
||||||
|
0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x12, 0x34, 0x1F, 0x05, 0xC7, 0x07, 0x1F,
|
||||||
|
0x05, 0xC7, 0x05, 0x1F, 0x06, 0xC7, 0x11, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F,
|
||||||
|
0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F,
|
||||||
|
0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x65, 0x1F, 0x01, 0x22, 0x01, 0x77, 0x01, 0xB7, 0x02, 0xC1,
|
||||||
|
0x01, 0xBB, 0x01, 0x7D, 0x01, 0x2B, 0x1C, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5,
|
||||||
|
0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F,
|
||||||
|
0x01, 0x8A, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC4, 0x01, 0x8A, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71,
|
||||||
|
0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01,
|
||||||
|
0x01, 0x36, 0xFF, 0x12, 0x33, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x05, 0x1F, 0x11, 0xC7,
|
||||||
|
0x06, 0x1F, 0x11, 0xC7, 0x06, 0x1F, 0x11, 0xC7, 0x06, 0x1F, 0x11, 0xC7, 0x12, 0x1F, 0x11, 0xC7,
|
||||||
|
0x64, 0x1F, 0x01, 0x4F, 0x01, 0x9C, 0x06, 0xC1, 0x01, 0xA8, 0x01, 0x6D, 0x1C, 0x1F, 0x01, 0x66,
|
||||||
|
0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98,
|
||||||
|
0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D,
|
||||||
|
0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35,
|
||||||
|
0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x12, 0x31, 0x1F, 0x06, 0xC7, 0x08, 0x1F,
|
||||||
|
0x05, 0xC7, 0x03, 0x1F, 0x12, 0xC7, 0x06, 0x1F, 0x11, 0xC7, 0x06, 0x1F, 0x11, 0xC7, 0x06, 0x1F,
|
||||||
|
0x11, 0xC7, 0x12, 0x1F, 0x11, 0xC7, 0x62, 0x1F, 0x01, 0x2C, 0x01, 0x7D, 0x01, 0xBE, 0x09, 0xC1,
|
||||||
|
0x01, 0x93, 0x01, 0x47, 0x1B, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C,
|
||||||
|
0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86,
|
||||||
|
0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70,
|
||||||
|
0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36,
|
||||||
|
0xFF, 0x12, 0x30, 0x1F, 0x05, 0xC7, 0x09, 0x1F, 0x05, 0xC7, 0x03, 0x1F, 0x12, 0xC7, 0x06, 0x1F,
|
||||||
|
0x11, 0xC7, 0x06, 0x1F, 0x11, 0xC7, 0x06, 0x1F, 0x11, 0xC7, 0x12, 0x1F, 0x11, 0xC7, 0x61, 0x1F,
|
||||||
|
0x01, 0x63, 0x01, 0xA3, 0x0C, 0xC1, 0x01, 0xBB, 0x01, 0x7D, 0x01, 0x2B, 0x1A, 0x1F, 0x01, 0x66,
|
||||||
|
0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98,
|
||||||
|
0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D,
|
||||||
|
0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35,
|
||||||
|
0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x12, 0x2F, 0x1F, 0x05, 0xC7, 0x09, 0x1F,
|
||||||
|
0x05, 0xC7, 0x03, 0x1F, 0x12, 0xC7, 0x07, 0x1F, 0x0F, 0xC7, 0x08, 0x1F, 0x0F, 0xC7, 0x08, 0x1F,
|
||||||
|
0x0F, 0xC7, 0x14, 0x1F, 0x0F, 0xC7, 0x60, 0x1F, 0x01, 0x33, 0x01, 0x88, 0x06, 0xC1, 0x01, 0xA5,
|
||||||
|
0x01, 0x76, 0x01, 0x3B, 0x01, 0x8E, 0x06, 0xC1, 0x01, 0xA8, 0x01, 0x6D, 0x1A, 0x1F, 0x01, 0x66,
|
||||||
|
0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98,
|
||||||
|
0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D,
|
||||||
|
0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35,
|
||||||
|
0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x12, 0x2E, 0x1F, 0x05, 0xC7, 0x09, 0x1F,
|
||||||
|
0x05, 0xC7, 0x03, 0x1F, 0x12, 0xC7, 0x08, 0x1F, 0x0D, 0xC7, 0x0A, 0x1F, 0x0D, 0xC7, 0x0A, 0x1F,
|
||||||
|
0x0D, 0xC7, 0x16, 0x1F, 0x0D, 0xC7, 0x60, 0x1F, 0x01, 0x73, 0x01, 0xB1, 0x05, 0xC1, 0x01, 0xAC,
|
||||||
|
0x01, 0x7B, 0x01, 0x49, 0x01, 0x48, 0x02, 0x17, 0x01, 0x3B, 0x01, 0x8E, 0x06, 0xC1, 0x01, 0x93,
|
||||||
|
0x01, 0x47, 0x19, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F,
|
||||||
|
0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x8A, 0x01, 0xC4,
|
||||||
|
0x03, 0xC6, 0x01, 0xC4, 0x01, 0x8A, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72,
|
||||||
|
0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0x1B, 0x1F, 0x01, 0x47, 0x01, 0x95, 0x05, 0xC1, 0x01, 0xB2, 0x01, 0x7E, 0x01, 0x4C,
|
||||||
|
0x03, 0x48, 0x04, 0x17, 0x01, 0x3B, 0x01, 0x8E, 0x05, 0xC1, 0x01, 0xBB, 0x01, 0x7D, 0x01, 0x2B,
|
||||||
|
0x18, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C,
|
||||||
|
0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6,
|
||||||
|
0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56,
|
||||||
|
0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0x18, 0x1F, 0x01, 0x27, 0x01, 0x79, 0x01, 0xB8, 0x04, 0xC1, 0x01, 0xBA, 0x01, 0x84, 0x01, 0x4E,
|
||||||
|
0x05, 0x48, 0x06, 0x17, 0x01, 0x3B, 0x01, 0x8E, 0x05, 0xC1, 0x01, 0xA8, 0x01, 0x6D, 0x18, 0x1F,
|
||||||
|
0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97,
|
||||||
|
0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5,
|
||||||
|
0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F,
|
||||||
|
0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x12, 0xFF, 0x12, 0x16, 0x1F,
|
||||||
|
0x01, 0x55, 0x01, 0xA0, 0x04, 0xC1, 0x01, 0xBF, 0x01, 0x8C, 0x01, 0x59, 0x07, 0x48, 0x08, 0x17,
|
||||||
|
0x01, 0x3B, 0x01, 0x8E, 0x05, 0xC1, 0x01, 0x93, 0x01, 0x47, 0x17, 0x1F, 0x01, 0x66, 0x01, 0xB5,
|
||||||
|
0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96,
|
||||||
|
0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F,
|
||||||
|
0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02,
|
||||||
|
0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x12, 0xFF, 0x12, 0x13, 0x1F, 0x01, 0x2D, 0x01, 0x80,
|
||||||
|
0x01, 0xBF, 0x04, 0xC1, 0x01, 0x92, 0x01, 0x62, 0x09, 0x48, 0x0A, 0x17, 0x01, 0x3B, 0x01, 0x8E,
|
||||||
|
0x04, 0xC1, 0x01, 0xBB, 0x01, 0x7D, 0x01, 0x2B, 0x16, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9,
|
||||||
|
0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64,
|
||||||
|
0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52,
|
||||||
|
0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00,
|
||||||
|
0x01, 0x01, 0x01, 0x36, 0xFF, 0x12, 0xFF, 0x12, 0x11, 0x1F, 0x01, 0x6D, 0x01, 0xAB, 0x04, 0xC1,
|
||||||
|
0x01, 0x99, 0x01, 0x6A, 0x0B, 0x48, 0x0C, 0x17, 0x01, 0x3B, 0x01, 0x8E, 0x04, 0xC1, 0x01, 0xA8,
|
||||||
|
0x01, 0x6D, 0x16, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F,
|
||||||
|
0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4,
|
||||||
|
0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72,
|
||||||
|
0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0x10, 0x1F, 0x06, 0xC1, 0x0D, 0x48, 0x0E, 0x17, 0x06, 0xC1, 0x17, 0x1F, 0x01, 0x66,
|
||||||
|
0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98,
|
||||||
|
0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D,
|
||||||
|
0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35,
|
||||||
|
0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x12, 0xFF, 0x12, 0x0F, 0x1F, 0x06, 0xC1,
|
||||||
|
0x0D, 0x48, 0x0E, 0x17, 0x06, 0xC1, 0x18, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5,
|
||||||
|
0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5E, 0x01, 0x97, 0x03, 0x98, 0x01, 0x97, 0x01, 0x5E, 0x05, 0x1F,
|
||||||
|
0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71,
|
||||||
|
0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01,
|
||||||
|
0x01, 0x36, 0xFF, 0x12, 0xFF, 0x12, 0x0E, 0x1F, 0x06, 0xC1, 0x0D, 0x48, 0x0E, 0x17, 0x06, 0xC1,
|
||||||
|
0x19, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C,
|
||||||
|
0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6,
|
||||||
|
0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56,
|
||||||
|
0x05, 0x1F, 0x01, 0x34, 0x01, 0x02, 0xFF, 0x12, 0xC1, 0x00, 0x01, 0x12, 0x01, 0x38, 0x4D, 0x1F,
|
||||||
|
0x06, 0xC1, 0x0D, 0x48, 0x0E, 0x17, 0x06, 0xC1, 0x1A, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9,
|
||||||
|
0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64,
|
||||||
|
0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52,
|
||||||
|
0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x34, 0x01, 0x02, 0xFF, 0x12,
|
||||||
|
0xC1, 0x00, 0x01, 0x14, 0x4D, 0x1F, 0x06, 0xC1, 0x0D, 0x48, 0x0E, 0x17, 0x06, 0xC1, 0x1B, 0x1F,
|
||||||
|
0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97,
|
||||||
|
0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5,
|
||||||
|
0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F,
|
||||||
|
0x01, 0x35, 0x01, 0x02, 0xFF, 0x12, 0xC0, 0x00, 0x01, 0x14, 0x4D, 0x1F, 0x06, 0xC1, 0x0D, 0x48,
|
||||||
|
0x0E, 0x17, 0x06, 0xC1, 0x1C, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C,
|
||||||
|
0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86,
|
||||||
|
0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70,
|
||||||
|
0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x37, 0x01, 0x12, 0xFF, 0x12, 0xBE, 0x00, 0x01, 0x12,
|
||||||
|
0x01, 0x38, 0x4D, 0x1F, 0x06, 0xC1, 0x0D, 0x48, 0x0E, 0x17, 0x06, 0xC1, 0x1D, 0x1F, 0x01, 0x66,
|
||||||
|
0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5E, 0x01, 0x97, 0x03, 0x98,
|
||||||
|
0x01, 0x97, 0x01, 0x5E, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D,
|
||||||
|
0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0x15, 0x1F, 0x06, 0xC1, 0x0D, 0x48, 0x0E, 0x17, 0x06, 0xC1, 0x1E, 0x1F, 0x01, 0x66, 0x01, 0xB5,
|
||||||
|
0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96,
|
||||||
|
0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F,
|
||||||
|
0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0xFF, 0x12, 0xFF, 0x12, 0x14, 0x1F,
|
||||||
|
0x06, 0xC1, 0x0D, 0x48, 0x0E, 0x17, 0x06, 0xC1, 0x1F, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9,
|
||||||
|
0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64,
|
||||||
|
0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52,
|
||||||
|
0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0xFF, 0x12, 0xFF, 0x12, 0x13, 0x1F, 0x06, 0xC1,
|
||||||
|
0x0D, 0x48, 0x0E, 0x17, 0x06, 0xC1, 0x20, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5,
|
||||||
|
0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F,
|
||||||
|
0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71,
|
||||||
|
0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0xFF, 0x12, 0xFF, 0x12, 0x12, 0x1F, 0x06, 0xC1, 0x0D, 0x48,
|
||||||
|
0x0E, 0x17, 0x06, 0xC1, 0x21, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C,
|
||||||
|
0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86,
|
||||||
|
0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x54, 0x01, 0x71, 0xFF, 0x12,
|
||||||
|
0xC5, 0x70, 0x01, 0x6E, 0x01, 0x4D, 0x4D, 0x1F, 0x06, 0xC1, 0x0D, 0x48, 0x0E, 0x17, 0x06, 0xC1,
|
||||||
|
0x22, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C,
|
||||||
|
0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6,
|
||||||
|
0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x54, 0x01, 0x71, 0xFF, 0x12, 0xC5, 0x70, 0x01, 0x6F,
|
||||||
|
0x4D, 0x1F, 0x06, 0xC1, 0x0B, 0x48, 0x01, 0x42, 0x01, 0x1A, 0x01, 0x09, 0x01, 0x15, 0x0C, 0x17,
|
||||||
|
0x06, 0xC1, 0x23, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F,
|
||||||
|
0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4,
|
||||||
|
0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0xFF, 0x12, 0xC4, 0x70,
|
||||||
|
0x01, 0x6F, 0x4D, 0x1F, 0x06, 0xC1, 0x0A, 0x48, 0x01, 0x2E, 0x01, 0x0F, 0x01, 0x08, 0x01, 0x03,
|
||||||
|
0x01, 0x04, 0x01, 0x0E, 0x0B, 0x17, 0x06, 0xC1, 0x24, 0x1F, 0x01, 0x68, 0x01, 0xB5, 0x03, 0xB9,
|
||||||
|
0x01, 0xB5, 0x01, 0x68, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64,
|
||||||
|
0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x50,
|
||||||
|
0x01, 0x6E, 0xFF, 0x12, 0xC2, 0x70, 0x01, 0x6E, 0x01, 0x4D, 0x4D, 0x1F, 0x06, 0xC1, 0x08, 0x48,
|
||||||
|
0x01, 0x44, 0x01, 0x1E, 0x03, 0x08, 0x03, 0x03, 0x01, 0x08, 0x01, 0x13, 0x09, 0x17, 0x06, 0xC1,
|
||||||
|
0x25, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C,
|
||||||
|
0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6,
|
||||||
|
0x01, 0xC5, 0x01, 0x8D, 0xFF, 0x12, 0xFF, 0x12, 0x19, 0x1F, 0x06, 0xC1, 0x07, 0x48, 0x01, 0x32,
|
||||||
|
0x01, 0x11, 0x04, 0x08, 0x05, 0x03, 0x01, 0x0D, 0x01, 0x16, 0x07, 0x17, 0x06, 0xC1, 0x26, 0x1F,
|
||||||
|
0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97,
|
||||||
|
0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5,
|
||||||
|
0x01, 0x8D, 0xFF, 0x12, 0xFF, 0x12, 0x18, 0x1F, 0x06, 0xC1, 0x05, 0x48, 0x01, 0x46, 0x01, 0x21,
|
||||||
|
0x01, 0x09, 0x05, 0x08, 0x06, 0x03, 0x01, 0x06, 0x01, 0x11, 0x06, 0x17, 0x06, 0xC1, 0x27, 0x1F,
|
||||||
|
0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97,
|
||||||
|
0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5,
|
||||||
|
0x01, 0x8D, 0xFF, 0x12, 0xFF, 0x12, 0x17, 0x1F, 0x06, 0xC1, 0x01, 0x99, 0x01, 0x6A, 0x02, 0x48,
|
||||||
|
0x01, 0x3C, 0x01, 0x16, 0x07, 0x08, 0x08, 0x03, 0x01, 0x0C, 0x01, 0x16, 0x02, 0x17, 0x01, 0x3B,
|
||||||
|
0x01, 0x8E, 0x06, 0xC1, 0x28, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C,
|
||||||
|
0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86,
|
||||||
|
0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0xFF, 0x12, 0xFF, 0x12, 0x16, 0x1F, 0x08, 0xC1,
|
||||||
|
0x01, 0x92, 0x01, 0x30, 0x01, 0x0A, 0x08, 0x08, 0x09, 0x03, 0x01, 0x05, 0x01, 0x26, 0x01, 0x8E,
|
||||||
|
0x08, 0xC1, 0x29, 0x1F, 0x01, 0x68, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x68, 0x05, 0x1F,
|
||||||
|
0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x8A, 0x01, 0xC4,
|
||||||
|
0xFF, 0x12, 0xC9, 0xC6, 0x01, 0xC3, 0x01, 0x81, 0x4D, 0x1F, 0x07, 0xC1, 0x01, 0xA9, 0x01, 0x44,
|
||||||
|
0x01, 0x13, 0x01, 0x0F, 0x01, 0x09, 0x07, 0x08, 0x08, 0x03, 0x01, 0x07, 0x01, 0x0F, 0x01, 0x15,
|
||||||
|
0x01, 0x57, 0x01, 0xAE, 0x07, 0xC1, 0x2A, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5,
|
||||||
|
0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F,
|
||||||
|
0x01, 0x8A, 0x01, 0xC4, 0xFF, 0x12, 0xC9, 0xC6, 0x01, 0xC2, 0x4D, 0x1F, 0x06, 0xC1, 0x01, 0x82,
|
||||||
|
0x01, 0x1B, 0x04, 0x13, 0x01, 0x0E, 0x06, 0x08, 0x06, 0x03, 0x01, 0x07, 0x01, 0x0F, 0x04, 0x13,
|
||||||
|
0x01, 0x1D, 0x01, 0x82, 0x06, 0xC1, 0x2B, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5,
|
||||||
|
0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F,
|
||||||
|
0x01, 0x86, 0x01, 0xC4, 0xFF, 0x12, 0xC8, 0xC6, 0x01, 0xC2, 0x4D, 0x1F, 0x06, 0xC1, 0x01, 0x89,
|
||||||
|
0x01, 0x20, 0x05, 0x13, 0x01, 0x11, 0x01, 0x0D, 0x04, 0x08, 0x04, 0x03, 0x01, 0x07, 0x01, 0x0F,
|
||||||
|
0x06, 0x13, 0x01, 0x24, 0x01, 0x89, 0x06, 0xC1, 0x2C, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9,
|
||||||
|
0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64,
|
||||||
|
0x05, 0x1F, 0x01, 0x85, 0x01, 0xC3, 0xFF, 0x12, 0xC6, 0xC6, 0x01, 0xC3, 0x01, 0x81, 0x4D, 0x1F,
|
||||||
|
0x07, 0xC1, 0x01, 0xB6, 0x01, 0x74, 0x01, 0x18, 0x05, 0x13, 0x01, 0x11, 0x01, 0x0D, 0x02, 0x08,
|
||||||
|
0x02, 0x03, 0x01, 0x07, 0x01, 0x0F, 0x06, 0x13, 0x01, 0x1A, 0x01, 0x78, 0x01, 0xBD, 0x07, 0xC1,
|
||||||
|
0x2D, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C,
|
||||||
|
0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0xFF, 0x12, 0xFF, 0x12, 0x1D, 0x1F, 0x09, 0xC1,
|
||||||
|
0x01, 0x9F, 0x01, 0x3E, 0x06, 0x13, 0x01, 0x10, 0x01, 0x0B, 0x01, 0x07, 0x01, 0x0F, 0x06, 0x13,
|
||||||
|
0x01, 0x16, 0x01, 0x60, 0x01, 0xAE, 0x09, 0xC1, 0x2E, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9,
|
||||||
|
0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x1C, 0x1F, 0x01, 0x67, 0x01, 0xA2, 0x09, 0xC1, 0x01, 0x7F, 0x01, 0x1C,
|
||||||
|
0x0D, 0x13, 0x01, 0x3F, 0x01, 0x9B, 0x09, 0xC1, 0x01, 0xA2, 0x01, 0x6B, 0x2F, 0x1F, 0x01, 0x66,
|
||||||
|
0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98,
|
||||||
|
0x01, 0x96, 0x01, 0x64, 0xFF, 0x12, 0xFF, 0x12, 0x1C, 0x1F, 0x01, 0x28, 0x01, 0x79, 0x01, 0xB4,
|
||||||
|
0x08, 0xC1, 0x01, 0xAF, 0x01, 0x69, 0x01, 0x15, 0x09, 0x13, 0x01, 0x24, 0x01, 0x89, 0x09, 0xC1,
|
||||||
|
0x01, 0xAD, 0x01, 0x77, 0x01, 0x25, 0x31, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5,
|
||||||
|
0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0x1D, 0x1F, 0x01, 0x3A, 0x01, 0x83, 0x01, 0xBF, 0x08, 0xC1, 0x01, 0x92, 0x01, 0x29,
|
||||||
|
0x06, 0x13, 0x01, 0x1A, 0x01, 0x78, 0x01, 0xBD, 0x08, 0xC1, 0x01, 0xB8, 0x01, 0x7D, 0x01, 0x2C,
|
||||||
|
0x34, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5E,
|
||||||
|
0x01, 0x97, 0xFF, 0x12, 0xCD, 0x98, 0x01, 0x91, 0x01, 0x58, 0x52, 0x1F, 0x01, 0x55, 0x01, 0x9A,
|
||||||
|
0x08, 0xC1, 0x01, 0xBD, 0x01, 0x7A, 0x01, 0x19, 0x02, 0x13, 0x01, 0x16, 0x01, 0x60, 0x01, 0xAE,
|
||||||
|
0x08, 0xC1, 0x01, 0xBE, 0x01, 0x88, 0x01, 0x3D, 0x37, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9,
|
||||||
|
0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5E, 0x01, 0x97, 0xFF, 0x12, 0xCD, 0x98, 0x01, 0x90,
|
||||||
|
0x54, 0x1F, 0x01, 0x6D, 0x01, 0xAA, 0x08, 0xC1, 0x01, 0xA1, 0x01, 0x48, 0x01, 0x43, 0x01, 0x9D,
|
||||||
|
0x09, 0xC1, 0x01, 0x93, 0x01, 0x4A, 0x3A, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5,
|
||||||
|
0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0xFF, 0x12, 0xCC, 0x98, 0x01, 0x90, 0x55, 0x1F,
|
||||||
|
0x01, 0x2C, 0x01, 0x7C, 0x01, 0xB8, 0x11, 0xC1, 0x01, 0x9E, 0x01, 0x61, 0x3D, 0x1F, 0x01, 0x66,
|
||||||
|
0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5B, 0x01, 0x91, 0xFF, 0x12,
|
||||||
|
0xCA, 0x98, 0x01, 0x91, 0x01, 0x58, 0x57, 0x1F, 0x01, 0x41, 0x01, 0x8B, 0x0E, 0xC1, 0x01, 0xA7,
|
||||||
|
0x01, 0x73, 0x01, 0x22, 0x3F, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0x2D, 0x1F, 0x01, 0x5A, 0x01, 0x9C, 0x0A, 0xC1, 0x01, 0xB3, 0x01, 0x7C,
|
||||||
|
0x01, 0x2A, 0x42, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0x2D, 0x1F, 0x01, 0x23, 0x01, 0x75, 0x01, 0xB0, 0x06, 0xC1, 0x01, 0xBB, 0x01, 0x80,
|
||||||
|
0x01, 0x31, 0x45, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0x2E, 0x1F, 0x01, 0x2F, 0x01, 0x7D, 0x01, 0xBC, 0x02, 0xC1, 0x01, 0xC0, 0x01, 0x8F,
|
||||||
|
0x01, 0x45, 0x48, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0x2F, 0x1F, 0x01, 0x4B, 0x01, 0x94, 0x01, 0x95, 0x01, 0x51, 0x4B, 0x1F, 0x01, 0x68,
|
||||||
|
0x01, 0xB5, 0xFF, 0x12, 0xD1, 0xB9, 0x01, 0xA6, 0x01, 0x5F, 0xAE, 0x1F, 0x01, 0x68, 0x01, 0xB5,
|
||||||
|
0xFF, 0x12, 0xD1, 0xB9, 0x01, 0xA4, 0xAF, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0xFF, 0x12, 0xD0, 0xB9,
|
||||||
|
0x01, 0xA4, 0xB0, 0x1F, 0x01, 0x65, 0x01, 0xA6, 0xFF, 0x12, 0xCE, 0xB9, 0x01, 0xA6, 0x01, 0x5F,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12,
|
||||||
|
0xFF, 0x12, 0xFF, 0x12, 0xFF, 0x12, 0x00, 0x00
|
||||||
|
}
|
827
src/rsrc/bitmaps/splash_a2560u.h
Normal file
827
src/rsrc/bitmaps/splash_a2560u.h
Normal file
|
@ -0,0 +1,827 @@
|
||||||
|
unsigned char splashscreen_lut[] = {
|
||||||
|
0x00, 0x00, 0xFF, 0x00,
|
||||||
|
0x08, 0x08, 0xFE, 0x00,
|
||||||
|
0x0B, 0x0B, 0xFD, 0x00,
|
||||||
|
0x5F, 0x5F, 0x00, 0x00,
|
||||||
|
0x60, 0x60, 0x00, 0x00,
|
||||||
|
0x61, 0x61, 0x00, 0x00,
|
||||||
|
0x62, 0x62, 0x00, 0x00,
|
||||||
|
0x63, 0x63, 0x00, 0x00,
|
||||||
|
0x64, 0x64, 0x00, 0x00,
|
||||||
|
0x65, 0x65, 0x00, 0x00,
|
||||||
|
0x66, 0x66, 0x00, 0x00,
|
||||||
|
0x67, 0x67, 0x00, 0x00,
|
||||||
|
0x68, 0x68, 0x00, 0x00,
|
||||||
|
0x69, 0x69, 0x00, 0x00,
|
||||||
|
0x6A, 0x6A, 0x00, 0x00,
|
||||||
|
0x6B, 0x6B, 0x00, 0x00,
|
||||||
|
0x6D, 0x6D, 0x00, 0x00,
|
||||||
|
0x6E, 0x6E, 0x00, 0x00,
|
||||||
|
0x29, 0x29, 0xF3, 0x00,
|
||||||
|
0x6F, 0x6F, 0x00, 0x00,
|
||||||
|
0x2A, 0x2A, 0xF3, 0x00,
|
||||||
|
0x70, 0x70, 0x00, 0x00,
|
||||||
|
0x71, 0x71, 0x00, 0x00,
|
||||||
|
0x72, 0x72, 0x00, 0x00,
|
||||||
|
0x73, 0x73, 0x00, 0x00,
|
||||||
|
0x77, 0x77, 0x00, 0x00,
|
||||||
|
0x78, 0x78, 0x00, 0x00,
|
||||||
|
0x79, 0x79, 0x00, 0x00,
|
||||||
|
0x7B, 0x7B, 0x00, 0x00,
|
||||||
|
0x7C, 0x7C, 0x00, 0x00,
|
||||||
|
0x7E, 0x7E, 0x00, 0x00,
|
||||||
|
0x80, 0x80, 0x00, 0x00,
|
||||||
|
0x80, 0x80, 0x01, 0x00,
|
||||||
|
0x81, 0x81, 0x02, 0x00,
|
||||||
|
0x80, 0x80, 0x06, 0x00,
|
||||||
|
0x81, 0x81, 0x0D, 0x00,
|
||||||
|
0x83, 0x83, 0x07, 0x00,
|
||||||
|
0x81, 0x81, 0x12, 0x00,
|
||||||
|
0x84, 0x84, 0x09, 0x00,
|
||||||
|
0x82, 0x82, 0x16, 0x00,
|
||||||
|
0x82, 0x82, 0x19, 0x00,
|
||||||
|
0x86, 0x86, 0x0F, 0x00,
|
||||||
|
0x83, 0x83, 0x1F, 0x00,
|
||||||
|
0x83, 0x83, 0x22, 0x00,
|
||||||
|
0x84, 0x84, 0x24, 0x00,
|
||||||
|
0x85, 0x85, 0x29, 0x00,
|
||||||
|
0x8A, 0x8A, 0x18, 0x00,
|
||||||
|
0x85, 0x85, 0x2B, 0x00,
|
||||||
|
0x8B, 0x8B, 0x1D, 0x00,
|
||||||
|
0x86, 0x86, 0x30, 0x00,
|
||||||
|
0x8C, 0x8C, 0x20, 0x00,
|
||||||
|
0x87, 0x87, 0x33, 0x00,
|
||||||
|
0x69, 0x69, 0x9E, 0x00,
|
||||||
|
0x6A, 0x6A, 0x9B, 0x00,
|
||||||
|
0x68, 0x68, 0xA2, 0x00,
|
||||||
|
0x6B, 0x6B, 0x99, 0x00,
|
||||||
|
0x6D, 0x6D, 0x94, 0x00,
|
||||||
|
0x6B, 0x6B, 0x9B, 0x00,
|
||||||
|
0x88, 0x88, 0x36, 0x00,
|
||||||
|
0x8E, 0x8E, 0x24, 0x00,
|
||||||
|
0x8F, 0x8F, 0x27, 0x00,
|
||||||
|
0x89, 0x89, 0x3C, 0x00,
|
||||||
|
0x90, 0x90, 0x29, 0x00,
|
||||||
|
0x90, 0x90, 0x2A, 0x00,
|
||||||
|
0x8A, 0x8A, 0x3F, 0x00,
|
||||||
|
0x8B, 0x8B, 0x41, 0x00,
|
||||||
|
0x92, 0x92, 0x2F, 0x00,
|
||||||
|
0x93, 0x93, 0x30, 0x00,
|
||||||
|
0x93, 0x93, 0x32, 0x00,
|
||||||
|
0x8D, 0x8D, 0x47, 0x00,
|
||||||
|
0x94, 0x94, 0x33, 0x00,
|
||||||
|
0x8E, 0x8E, 0x49, 0x00,
|
||||||
|
0x94, 0x94, 0x35, 0x00,
|
||||||
|
0x95, 0x95, 0x36, 0x00,
|
||||||
|
0x8F, 0x8F, 0x4C, 0x00,
|
||||||
|
0x8F, 0x8F, 0x4E, 0x00,
|
||||||
|
0x97, 0x97, 0x3B, 0x00,
|
||||||
|
0x6D, 0x80, 0x94, 0x00,
|
||||||
|
0x98, 0x98, 0x3F, 0x00,
|
||||||
|
0x92, 0x92, 0x54, 0x00,
|
||||||
|
0x6B, 0x80, 0x99, 0x00,
|
||||||
|
0x92, 0x92, 0x56, 0x00,
|
||||||
|
0x6A, 0x80, 0x9B, 0x00,
|
||||||
|
0x6B, 0x80, 0x9B, 0x00,
|
||||||
|
0x69, 0x80, 0x9E, 0x00,
|
||||||
|
0x93, 0x93, 0x58, 0x00,
|
||||||
|
0x68, 0x80, 0xA2, 0x00,
|
||||||
|
0x9A, 0x9A, 0x44, 0x00,
|
||||||
|
0x6D, 0xB3, 0x00, 0x00,
|
||||||
|
0x9B, 0x9B, 0x45, 0x00,
|
||||||
|
0x95, 0x95, 0x5C, 0x00,
|
||||||
|
0x6B, 0xB6, 0x00, 0x00,
|
||||||
|
0x6A, 0xB7, 0x00, 0x00,
|
||||||
|
0x6B, 0xB7, 0x00, 0x00,
|
||||||
|
0x69, 0xB9, 0x00, 0x00,
|
||||||
|
0xB3, 0xB3, 0x00, 0x00,
|
||||||
|
0x9E, 0x9E, 0x4D, 0x00,
|
||||||
|
0x98, 0x98, 0x62, 0x00,
|
||||||
|
0x9E, 0x9E, 0x4E, 0x00,
|
||||||
|
0x98, 0x98, 0x63, 0x00,
|
||||||
|
0x68, 0xBB, 0x00, 0x00,
|
||||||
|
0xB6, 0xB6, 0x00, 0x00,
|
||||||
|
0xB7, 0xB7, 0x00, 0x00,
|
||||||
|
0x9A, 0x9A, 0x66, 0x00,
|
||||||
|
0xB9, 0xB9, 0x00, 0x00,
|
||||||
|
0xA1, 0xA1, 0x54, 0x00,
|
||||||
|
0xA2, 0xA2, 0x57, 0x00,
|
||||||
|
0x9C, 0x9C, 0x6C, 0x00,
|
||||||
|
0xBB, 0xBB, 0x00, 0x00,
|
||||||
|
0x9D, 0x9D, 0x6D, 0x00,
|
||||||
|
0x29, 0x80, 0xF3, 0x00,
|
||||||
|
0x2A, 0x80, 0xF3, 0x00,
|
||||||
|
0x00, 0x80, 0xFF, 0x00,
|
||||||
|
0x0B, 0x80, 0xFD, 0x00,
|
||||||
|
0x08, 0x80, 0xFE, 0x00,
|
||||||
|
0x9F, 0x9F, 0x72, 0x00,
|
||||||
|
0xA7, 0xA7, 0x63, 0x00,
|
||||||
|
0xA2, 0xA2, 0x77, 0x00,
|
||||||
|
0xA8, 0xA8, 0x66, 0x00,
|
||||||
|
0xA4, 0xA4, 0x7C, 0x00,
|
||||||
|
0xAA, 0xAA, 0x6B, 0x00,
|
||||||
|
0xA7, 0xA7, 0x81, 0x00,
|
||||||
|
0xAC, 0xAC, 0x71, 0x00,
|
||||||
|
0xAE, 0xAE, 0x74, 0x00,
|
||||||
|
0xAA, 0xAA, 0x85, 0x00,
|
||||||
|
0xAC, 0xAC, 0x8A, 0x00,
|
||||||
|
0xB2, 0xB2, 0x7D, 0x00,
|
||||||
|
0xB2, 0xB2, 0x7E, 0x00,
|
||||||
|
0xAF, 0xAF, 0x8D, 0x00,
|
||||||
|
0x6D, 0xB3, 0x94, 0x00,
|
||||||
|
0xB5, 0xB5, 0x84, 0x00,
|
||||||
|
0xB1, 0xB1, 0x92, 0x00,
|
||||||
|
0xB5, 0xB5, 0x86, 0x00,
|
||||||
|
0x6B, 0xB6, 0x99, 0x00,
|
||||||
|
0x6A, 0xB7, 0x9B, 0x00,
|
||||||
|
0x6B, 0xB7, 0x9B, 0x00,
|
||||||
|
0xB3, 0xB3, 0x95, 0x00,
|
||||||
|
0xB7, 0xB7, 0x8A, 0x00,
|
||||||
|
0x69, 0xB9, 0x9E, 0x00,
|
||||||
|
0xB6, 0xB6, 0x99, 0x00,
|
||||||
|
0xB9, 0xB9, 0x8F, 0x00,
|
||||||
|
0x68, 0xBB, 0xA2, 0x00,
|
||||||
|
0xBB, 0xBB, 0x92, 0x00,
|
||||||
|
0xB8, 0xB8, 0x9D, 0x00,
|
||||||
|
0x2A, 0xF5, 0x00, 0x00,
|
||||||
|
0x29, 0xF6, 0x00, 0x00,
|
||||||
|
0xBC, 0xBC, 0x96, 0x00,
|
||||||
|
0xBA, 0xBA, 0xA0, 0x00,
|
||||||
|
0xBB, 0xBB, 0xA1, 0x00,
|
||||||
|
0xBC, 0xBC, 0xA3, 0x00,
|
||||||
|
0x08, 0xFE, 0x00, 0x00,
|
||||||
|
0x0B, 0xFE, 0x00, 0x00,
|
||||||
|
0x00, 0xFF, 0x00, 0x00,
|
||||||
|
0xC0, 0xC0, 0x9E, 0x00,
|
||||||
|
0xBE, 0xBE, 0xA6, 0x00,
|
||||||
|
0xC1, 0xC1, 0xA1, 0x00,
|
||||||
|
0xBF, 0xBF, 0xA8, 0x00,
|
||||||
|
0xC2, 0xC2, 0xA2, 0x00,
|
||||||
|
0xC0, 0xC0, 0xA9, 0x00,
|
||||||
|
0xC2, 0xC2, 0xA4, 0x00,
|
||||||
|
0xC1, 0xC1, 0xAA, 0x00,
|
||||||
|
0xC4, 0xC4, 0xA8, 0x00,
|
||||||
|
0xC3, 0xC3, 0xAD, 0x00,
|
||||||
|
0xC3, 0xC3, 0xAE, 0x00,
|
||||||
|
0xF5, 0xF5, 0x00, 0x00,
|
||||||
|
0xC5, 0xC5, 0xAA, 0x00,
|
||||||
|
0xF6, 0xF6, 0x00, 0x00,
|
||||||
|
0xC4, 0xC4, 0xAF, 0x00,
|
||||||
|
0xC5, 0xC5, 0xB0, 0x00,
|
||||||
|
0xC6, 0xC6, 0xAD, 0x00,
|
||||||
|
0xC5, 0xC5, 0xB1, 0x00,
|
||||||
|
0xC6, 0xC6, 0xB2, 0x00,
|
||||||
|
0xC7, 0xC7, 0xAF, 0x00,
|
||||||
|
0xC7, 0xC7, 0xB3, 0x00,
|
||||||
|
0xC8, 0xC8, 0xB0, 0x00,
|
||||||
|
0xC8, 0xC8, 0xB2, 0x00,
|
||||||
|
0xC8, 0xC8, 0xB4, 0x00,
|
||||||
|
0xC8, 0xC8, 0xB5, 0x00,
|
||||||
|
0xC9, 0xC9, 0xB3, 0x00,
|
||||||
|
0xC9, 0xC9, 0xB6, 0x00,
|
||||||
|
0xC9, 0xC9, 0xB7, 0x00,
|
||||||
|
0xFE, 0xFE, 0x00, 0x00,
|
||||||
|
0xCA, 0xCA, 0xB6, 0x00,
|
||||||
|
0xCA, 0xCA, 0xB7, 0x00,
|
||||||
|
0xCA, 0xCA, 0xB8, 0x00,
|
||||||
|
0xFF, 0xFF, 0x00, 0x00,
|
||||||
|
0xCB, 0xCB, 0xB8, 0x00,
|
||||||
|
0xCB, 0xCB, 0xB9, 0x00,
|
||||||
|
0xCB, 0xCB, 0xBA, 0x00,
|
||||||
|
0xCC, 0xCC, 0xB9, 0x00,
|
||||||
|
0xCC, 0xCC, 0xBA, 0x00,
|
||||||
|
0xCC, 0xCC, 0xBB, 0x00,
|
||||||
|
0xCD, 0xCD, 0xBB, 0x00,
|
||||||
|
0xCD, 0xCD, 0xBC, 0x00,
|
||||||
|
0x2A, 0xF5, 0xF3, 0x00,
|
||||||
|
0x29, 0xF6, 0xF3, 0x00,
|
||||||
|
0x0B, 0xFE, 0xFD, 0x00,
|
||||||
|
0x08, 0xFE, 0xFE, 0x00,
|
||||||
|
0x00, 0xFF, 0xFF, 0x00,
|
||||||
|
0xFF, 0xFF, 0xFF, 0x00,
|
||||||
|
0xC8, 0xC8, 0xC8, 0x00,
|
||||||
|
0xC9, 0xC9, 0xC9, 0x00,
|
||||||
|
0xCA, 0xCA, 0xCA, 0x00,
|
||||||
|
0xCB, 0xCB, 0xCB, 0x00,
|
||||||
|
0xCC, 0xCC, 0xCC, 0x00,
|
||||||
|
0xCD, 0xCD, 0xCD, 0x00,
|
||||||
|
0xCE, 0xCE, 0xCE, 0x00,
|
||||||
|
0xCF, 0xCF, 0xCF, 0x00,
|
||||||
|
0xD0, 0xD0, 0xD0, 0x00,
|
||||||
|
0xD1, 0xD1, 0xD1, 0x00,
|
||||||
|
0xD2, 0xD2, 0xD2, 0x00,
|
||||||
|
0xD3, 0xD3, 0xD3, 0x00,
|
||||||
|
0xD4, 0xD4, 0xD4, 0x00,
|
||||||
|
0xD5, 0xD5, 0xD5, 0x00,
|
||||||
|
0xD6, 0xD6, 0xD6, 0x00,
|
||||||
|
0xD7, 0xD7, 0xD7, 0x00,
|
||||||
|
0xD8, 0xD8, 0xD8, 0x00,
|
||||||
|
0xD9, 0xD9, 0xD9, 0x00,
|
||||||
|
0xDA, 0xDA, 0xDA, 0x00,
|
||||||
|
0xDB, 0xDB, 0xDB, 0x00,
|
||||||
|
0xDC, 0xDC, 0xDC, 0x00,
|
||||||
|
0xDD, 0xDD, 0xDD, 0x00,
|
||||||
|
0xDE, 0xDE, 0xDE, 0x00,
|
||||||
|
0xDF, 0xDF, 0xDF, 0x00,
|
||||||
|
0xE0, 0xE0, 0xE0, 0x00,
|
||||||
|
0xE1, 0xE1, 0xE1, 0x00,
|
||||||
|
0xE2, 0xE2, 0xE2, 0x00,
|
||||||
|
0xE3, 0xE3, 0xE3, 0x00,
|
||||||
|
0xE4, 0xE4, 0xE4, 0x00,
|
||||||
|
0xE5, 0xE5, 0xE5, 0x00,
|
||||||
|
0xE6, 0xE6, 0xE6, 0x00,
|
||||||
|
0xE7, 0xE7, 0xE7, 0x00,
|
||||||
|
0xE8, 0xE8, 0xE8, 0x00,
|
||||||
|
0xE9, 0xE9, 0xE9, 0x00,
|
||||||
|
0xEA, 0xEA, 0xEA, 0x00,
|
||||||
|
0xEB, 0xEB, 0xEB, 0x00,
|
||||||
|
0xEC, 0xEC, 0xEC, 0x00,
|
||||||
|
0xED, 0xED, 0xED, 0x00,
|
||||||
|
0xEE, 0xEE, 0xEE, 0x00,
|
||||||
|
0xEF, 0xEF, 0xEF, 0x00,
|
||||||
|
0xF0, 0xF0, 0xF0, 0x00,
|
||||||
|
0xF1, 0xF1, 0xF1, 0x00,
|
||||||
|
0xF2, 0xF2, 0xF2, 0x00,
|
||||||
|
0xF3, 0xF3, 0xF3, 0x00,
|
||||||
|
0xF4, 0xF4, 0xF4, 0x00,
|
||||||
|
0xF5, 0xF5, 0xF5, 0x00,
|
||||||
|
0xF6, 0xF6, 0xF6, 0x00,
|
||||||
|
0xF7, 0xF7, 0xF7, 0x00,
|
||||||
|
0xF8, 0xF8, 0xF8, 0x00,
|
||||||
|
0xF9, 0xF9, 0xF9, 0x00,
|
||||||
|
0xFA, 0xFA, 0xFA, 0x00,
|
||||||
|
0xFB, 0xFB, 0xFB, 0x00,
|
||||||
|
0xFC, 0xFC, 0xFC, 0x00,
|
||||||
|
0xFD, 0xFD, 0xFD, 0x00,
|
||||||
|
0xFE, 0xFE, 0xFE, 0x00,
|
||||||
|
0xFF, 0xFF, 0xFF, 0x00,
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned char splashscreen_pix[] = {
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xDC, 0x1F, 0x01, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x7F, 0x1F, 0x03, 0xC7,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F, 0x01, 0xC7, 0x2B, 0x1F, 0x04, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0x52, 0x1F, 0x02, 0xC7, 0x28, 0x1F, 0x06, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F, 0x04, 0xC7,
|
||||||
|
0x24, 0x1F, 0x08, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F, 0x06, 0xC7, 0x20, 0x1F, 0x0A, 0xC7,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F, 0x07, 0xC7, 0x1E, 0x1F, 0x0B, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0x53, 0x1F, 0x08, 0xC7, 0x1A, 0x1F, 0x0D, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x55, 0x1F, 0x07, 0xC7,
|
||||||
|
0x17, 0x1F, 0x0F, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x57, 0x1F, 0x07, 0xC7, 0x13, 0x1F, 0x11, 0xC7,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0x59, 0x1F, 0x07, 0xC7, 0x10, 0x1F, 0x12, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0x5A, 0x1F, 0x07, 0xC7, 0x0D, 0x1F, 0x13, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x5D, 0x1F, 0x07, 0xC7,
|
||||||
|
0x09, 0x1F, 0x13, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x61, 0x1F, 0x07, 0xC7, 0x05, 0x1F, 0x14, 0xC7,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0x63, 0x1F, 0x07, 0xC7, 0x02, 0x1F, 0x14, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0x67, 0x1F, 0x19, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x6B, 0x1F, 0x15, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0x6D, 0x1F, 0x13, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x6D, 0x1F, 0x14, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0x6D, 0x1F, 0x13, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x6D, 0x1F, 0x13, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0x6D, 0x1F, 0x13, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x6D, 0x1F, 0x17, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0x69, 0x1F, 0x1A, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x67, 0x1F, 0x13, 0xC7, 0x03, 0x1F, 0x07, 0xC7,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0x63, 0x1F, 0x13, 0xC7, 0x07, 0x1F, 0x07, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0x5F, 0x1F, 0x13, 0xC7, 0x0A, 0x1F, 0x07, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x5D, 0x1F, 0x13, 0xC7,
|
||||||
|
0x0D, 0x1F, 0x07, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x5B, 0x1F, 0x11, 0xC7, 0x10, 0x1F, 0x08, 0xC7,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0x59, 0x1F, 0x0F, 0xC7, 0x14, 0x1F, 0x07, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0x58, 0x1F, 0x0D, 0xC7, 0x18, 0x1F, 0x07, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x56, 0x1F, 0x0C, 0xC7,
|
||||||
|
0x1A, 0x1F, 0x08, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x54, 0x1F, 0x0A, 0xC7, 0x1E, 0x1F, 0x07, 0xC7,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0x53, 0x1F, 0x08, 0xC7, 0x22, 0x1F, 0x06, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0x52, 0x1F, 0x06, 0xC7, 0x25, 0x1F, 0x05, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F, 0x04, 0xC7,
|
||||||
|
0x29, 0x1F, 0x03, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F, 0x03, 0xC7, 0x2B, 0x1F, 0x02, 0xC7,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F, 0x01, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0x09, 0x1F, 0x30, 0xC7,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F, 0x30, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F, 0x30, 0xC7,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F, 0x30, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F, 0x30, 0xC7,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F, 0x30, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F, 0x30, 0xC7,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F, 0x30, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F, 0x30, 0xC7,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F, 0x30, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0x61, 0x1F, 0x30, 0xC7, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0x52, 0x1F, 0x30, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F, 0x30, 0xC7, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0x52, 0x1F, 0x30, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x76, 0x1F, 0x0C, 0xC7, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0x74, 0x1F, 0x0E, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x72, 0x1F, 0x10, 0xC7, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0x70, 0x1F, 0x12, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x6F, 0x1F, 0x12, 0xC7, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0x6E, 0x1F, 0x12, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x6E, 0x1F, 0x12, 0xC7, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0x6E, 0x1F, 0x13, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x6D, 0x1F, 0x13, 0xC7, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0x6E, 0x1F, 0x12, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x6E, 0x1F, 0x12, 0xC7, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0x6E, 0x1F, 0x12, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x6E, 0x1F, 0x12, 0xC7, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0x6E, 0x1F, 0x13, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x6D, 0x1F, 0x13, 0xC7, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0x6E, 0x1F, 0x12, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x6E, 0x1F, 0x12, 0xC7, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0x6E, 0x1F, 0x12, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x6E, 0x1F, 0x12, 0xC7, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0x6E, 0x1F, 0x13, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x6E, 0x1F, 0x12, 0xC7, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0x70, 0x1F, 0x10, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x72, 0x1F, 0x0E, 0xC7, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0x74, 0x1F, 0x0C, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x76, 0x1F, 0x30, 0xC7, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0x52, 0x1F, 0x30, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F, 0x30, 0xC7, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0x52, 0x1F, 0x30, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0x06, 0x1F, 0x04, 0xC7, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0x7E, 0x1F, 0x04, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F, 0x04, 0xC7, 0x28, 0x1F,
|
||||||
|
0x04, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F, 0x04, 0xC7, 0x28, 0x1F, 0x04, 0xC7, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0x52, 0x1F, 0x04, 0xC7, 0x28, 0x1F, 0x04, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F,
|
||||||
|
0x04, 0xC7, 0x0F, 0x1F, 0x04, 0xC7, 0x15, 0x1F, 0x04, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F,
|
||||||
|
0x04, 0xC7, 0x0F, 0x1F, 0x04, 0xC7, 0x15, 0x1F, 0x04, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F,
|
||||||
|
0x04, 0xC7, 0x0F, 0x1F, 0x04, 0xC7, 0x15, 0x1F, 0x04, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F,
|
||||||
|
0x04, 0xC7, 0x0F, 0x1F, 0x04, 0xC7, 0x15, 0x1F, 0x04, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F,
|
||||||
|
0x04, 0xC7, 0x0F, 0x1F, 0x04, 0xC7, 0x15, 0x1F, 0x04, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F,
|
||||||
|
0x04, 0xC7, 0x0F, 0x1F, 0x04, 0xC7, 0x15, 0x1F, 0x04, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F,
|
||||||
|
0x04, 0xC7, 0x0F, 0x1F, 0x04, 0xC7, 0x15, 0x1F, 0x04, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F,
|
||||||
|
0x04, 0xC7, 0x0F, 0x1F, 0x04, 0xC7, 0x15, 0x1F, 0x04, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F,
|
||||||
|
0x04, 0xC7, 0x0F, 0x1F, 0x04, 0xC7, 0x15, 0x1F, 0x04, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F,
|
||||||
|
0x04, 0xC7, 0x0F, 0x1F, 0x04, 0xC7, 0x15, 0x1F, 0x04, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F,
|
||||||
|
0x04, 0xC7, 0x0F, 0x1F, 0x04, 0xC7, 0x15, 0x1F, 0x04, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F,
|
||||||
|
0x04, 0xC7, 0x0F, 0x1F, 0x04, 0xC7, 0x15, 0x1F, 0x04, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F,
|
||||||
|
0x04, 0xC7, 0x0F, 0x1F, 0x04, 0xC7, 0x15, 0x1F, 0x04, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F,
|
||||||
|
0x04, 0xC7, 0x0F, 0x1F, 0x04, 0xC7, 0x15, 0x1F, 0x04, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F,
|
||||||
|
0x04, 0xC7, 0x0F, 0x1F, 0x04, 0xC7, 0x15, 0x1F, 0x04, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F,
|
||||||
|
0x30, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F, 0x30, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F,
|
||||||
|
0x30, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F, 0x30, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F,
|
||||||
|
0x30, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F, 0x30, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F,
|
||||||
|
0x30, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F, 0x30, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F,
|
||||||
|
0x30, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F, 0x30, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0x6D, 0x1F, 0x0E, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x70, 0x1F, 0x17, 0xC7, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0x68, 0x1F, 0x1D, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x63, 0x1F, 0x21, 0xC7, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0x5F, 0x1F, 0x24, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x5D, 0x1F, 0x26, 0xC7, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0x5B, 0x1F, 0x28, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x59, 0x1F, 0x2A, 0xC7, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0x57, 0x1F, 0x2C, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x55, 0x1F, 0x2D, 0xC7, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0x55, 0x1F, 0x2E, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x53, 0x1F, 0x0D, 0xC7, 0x17, 0x1F,
|
||||||
|
0x0B, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x53, 0x1F, 0x08, 0xC7, 0x20, 0x1F, 0x08, 0xC7, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0x52, 0x1F, 0x06, 0xC7, 0x25, 0x1F, 0x05, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x51, 0x1F,
|
||||||
|
0x05, 0xC7, 0x28, 0x1F, 0x04, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x51, 0x1F, 0x04, 0xC7, 0x2A, 0x1F,
|
||||||
|
0x04, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x50, 0x1F, 0x04, 0xC7, 0x2A, 0x1F, 0x04, 0xC7, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0x50, 0x1F, 0x03, 0xC7, 0x2C, 0x1F, 0x03, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x50, 0x1F,
|
||||||
|
0x03, 0xC7, 0x2C, 0x1F, 0x03, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x50, 0x1F, 0x03, 0xC7, 0x2C, 0x1F,
|
||||||
|
0x03, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x50, 0x1F, 0x03, 0xC7, 0x2C, 0x1F, 0x03, 0xC7, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0x50, 0x1F, 0x03, 0xC7, 0x2C, 0x1F, 0x03, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x50, 0x1F,
|
||||||
|
0x04, 0xC7, 0x2A, 0x1F, 0x04, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x50, 0x1F, 0x04, 0xC7, 0x2A, 0x1F,
|
||||||
|
0x04, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x50, 0x1F, 0x05, 0xC7, 0x28, 0x1F, 0x05, 0xC7, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0x51, 0x1F, 0x05, 0xC7, 0x26, 0x1F, 0x05, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F,
|
||||||
|
0x08, 0xC7, 0x20, 0x1F, 0x08, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F, 0x0C, 0xC7, 0x18, 0x1F,
|
||||||
|
0x0C, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x53, 0x1F, 0x2E, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x54, 0x1F,
|
||||||
|
0x2E, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x55, 0x1F, 0x2C, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x57, 0x1F,
|
||||||
|
0x2A, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x59, 0x1F, 0x28, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x5B, 0x1F,
|
||||||
|
0x26, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x5D, 0x1F, 0x24, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x60, 0x1F,
|
||||||
|
0x20, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x63, 0x1F, 0x1D, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x68, 0x1F,
|
||||||
|
0x18, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x6F, 0x1F, 0x0E, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xE5, 0x1F, 0x04, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x7E, 0x1F, 0x04, 0xC7, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0x7E, 0x1F, 0x04, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x7E, 0x1F, 0x04, 0xC7, 0x11, 0x1F,
|
||||||
|
0x04, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x69, 0x1F, 0x04, 0xC7, 0x11, 0x1F, 0x04, 0xC7, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0x69, 0x1F, 0x04, 0xC7, 0x11, 0x1F, 0x04, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x69, 0x1F,
|
||||||
|
0x04, 0xC7, 0x11, 0x1F, 0x04, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x69, 0x1F, 0x04, 0xC7, 0x11, 0x1F,
|
||||||
|
0x04, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x69, 0x1F, 0x04, 0xC7, 0x11, 0x1F, 0x04, 0xC7, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0x69, 0x1F, 0x04, 0xC7, 0x11, 0x1F, 0x04, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x69, 0x1F,
|
||||||
|
0x04, 0xC7, 0x11, 0x1F, 0x04, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x69, 0x1F, 0x04, 0xC7, 0x11, 0x1F,
|
||||||
|
0x04, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x69, 0x1F, 0x04, 0xC7, 0x11, 0x1F, 0x04, 0xC7, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0x69, 0x1F, 0x04, 0xC7, 0x11, 0x1F, 0x04, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x69, 0x1F,
|
||||||
|
0x04, 0xC7, 0x11, 0x1F, 0x04, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x69, 0x1F, 0x04, 0xC7, 0x11, 0x1F,
|
||||||
|
0x04, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x69, 0x1F, 0x04, 0xC7, 0x11, 0x1F, 0x04, 0xC7, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0x69, 0x1F, 0x04, 0xC7, 0x11, 0x1F, 0x04, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x69, 0x1F,
|
||||||
|
0x30, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F, 0x30, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F,
|
||||||
|
0x30, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F, 0x30, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F,
|
||||||
|
0x30, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F, 0x30, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F,
|
||||||
|
0x30, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F, 0x30, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F,
|
||||||
|
0x30, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0x52, 0x1F, 0x30, 0xC7, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0x5E, 0x1F, 0x01, 0x38, 0x01, 0x12, 0x4C, 0x00, 0x01, 0x12, 0x01, 0x39, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0x32, 0x1F, 0x01, 0x14, 0x4E, 0x00, 0x01, 0x02, 0x01, 0x34, 0xFF, 0x1F, 0xFF, 0x1F, 0x31, 0x1F,
|
||||||
|
0x01, 0x14, 0x4F, 0x00, 0x01, 0x02, 0x01, 0x34, 0xFF, 0x1F, 0xFF, 0x1F, 0x30, 0x1F, 0x01, 0x38,
|
||||||
|
0x01, 0x12, 0x4F, 0x00, 0x01, 0x02, 0x01, 0x34, 0xFF, 0x1F, 0xFF, 0x1F, 0x7C, 0x1F, 0x01, 0x35,
|
||||||
|
0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x1F, 0xFF, 0x1F, 0x7C, 0x1F, 0x01, 0x35,
|
||||||
|
0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x1F, 0xFF, 0x1F, 0x7C, 0x1F, 0x01, 0x35,
|
||||||
|
0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x1F, 0xFF, 0x1F, 0x7C, 0x1F, 0x01, 0x35,
|
||||||
|
0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x1F, 0xFF, 0x1F, 0x2B, 0x1F, 0x01, 0x4D,
|
||||||
|
0x01, 0x6E, 0x48, 0x70, 0x01, 0x6E, 0x01, 0x53, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00,
|
||||||
|
0x01, 0x01, 0x01, 0x36, 0xFF, 0x1F, 0x5B, 0x1F, 0x05, 0xC7, 0x0D, 0x1F, 0x0D, 0xC7, 0x09, 0x1F,
|
||||||
|
0x10, 0xC7, 0x08, 0x1F, 0x0D, 0xC7, 0x0A, 0x1F, 0x0D, 0xC7, 0x14, 0x1F, 0x05, 0xC7, 0x07, 0x1F,
|
||||||
|
0x05, 0xC7, 0x45, 0x1F, 0x01, 0x6F, 0x4A, 0x70, 0x01, 0x71, 0x01, 0x54, 0x05, 0x1F, 0x01, 0x35,
|
||||||
|
0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x1F, 0x5A, 0x1F, 0x05, 0xC7, 0x0C, 0x1F,
|
||||||
|
0x0F, 0xC7, 0x07, 0x1F, 0x11, 0xC7, 0x07, 0x1F, 0x0F, 0xC7, 0x08, 0x1F, 0x0F, 0xC7, 0x13, 0x1F,
|
||||||
|
0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x45, 0x1F, 0x01, 0x6F, 0x4B, 0x70, 0x01, 0x71, 0x01, 0x54,
|
||||||
|
0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x1F, 0x59, 0x1F,
|
||||||
|
0x05, 0xC7, 0x0B, 0x1F, 0x11, 0xC7, 0x06, 0x1F, 0x11, 0xC7, 0x06, 0x1F, 0x11, 0xC7, 0x06, 0x1F,
|
||||||
|
0x11, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x45, 0x1F, 0x01, 0x4D, 0x01, 0x6E,
|
||||||
|
0x4B, 0x70, 0x01, 0x71, 0x01, 0x54, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01,
|
||||||
|
0x01, 0x36, 0xFF, 0x1F, 0x57, 0x1F, 0x07, 0xC7, 0x0A, 0x1F, 0x11, 0xC7, 0x06, 0x1F, 0x11, 0xC7,
|
||||||
|
0x06, 0x1F, 0x11, 0xC7, 0x06, 0x1F, 0x11, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7,
|
||||||
|
0x8E, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35,
|
||||||
|
0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x1F, 0x56, 0x1F, 0x07, 0xC7, 0x0A, 0x1F,
|
||||||
|
0x11, 0xC7, 0x06, 0x1F, 0x11, 0xC7, 0x06, 0x1F, 0x11, 0xC7, 0x06, 0x1F, 0x11, 0xC7, 0x12, 0x1F,
|
||||||
|
0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x8F, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72,
|
||||||
|
0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x1F,
|
||||||
|
0x55, 0x1F, 0x07, 0xC7, 0x0A, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7,
|
||||||
|
0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7,
|
||||||
|
0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x90, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70,
|
||||||
|
0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36,
|
||||||
|
0xFF, 0x1F, 0x54, 0x1F, 0x07, 0xC7, 0x0A, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F,
|
||||||
|
0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F,
|
||||||
|
0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x91, 0x1F, 0x01, 0x52, 0x01, 0x71,
|
||||||
|
0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01,
|
||||||
|
0x01, 0x36, 0xFF, 0x1F, 0x53, 0x1F, 0x03, 0xC7, 0x01, 0x1F, 0x03, 0xC7, 0x0A, 0x1F, 0x05, 0xC7,
|
||||||
|
0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7,
|
||||||
|
0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7,
|
||||||
|
0x45, 0x1F, 0x01, 0x81, 0x01, 0xC3, 0x44, 0xC6, 0x01, 0xC3, 0x01, 0x87, 0x05, 0x1F, 0x01, 0x52,
|
||||||
|
0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00,
|
||||||
|
0x01, 0x01, 0x01, 0x36, 0xFF, 0x1F, 0x52, 0x1F, 0x03, 0xC7, 0x01, 0x1F, 0x03, 0xC7, 0x0A, 0x1F,
|
||||||
|
0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F,
|
||||||
|
0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F,
|
||||||
|
0x05, 0xC7, 0x45, 0x1F, 0x01, 0xC2, 0x46, 0xC6, 0x01, 0xC4, 0x01, 0x8A, 0x05, 0x1F, 0x01, 0x52,
|
||||||
|
0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00,
|
||||||
|
0x01, 0x01, 0x01, 0x36, 0xFF, 0x1F, 0x50, 0x1F, 0x04, 0xC7, 0x01, 0x1F, 0x04, 0xC7, 0x09, 0x1F,
|
||||||
|
0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F,
|
||||||
|
0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F,
|
||||||
|
0x05, 0xC7, 0x45, 0x1F, 0x01, 0xC2, 0x47, 0xC6, 0x01, 0xC4, 0x01, 0x8A, 0x05, 0x1F, 0x01, 0x52,
|
||||||
|
0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00,
|
||||||
|
0x01, 0x01, 0x01, 0x36, 0xFF, 0x1F, 0x4F, 0x1F, 0x04, 0xC7, 0x01, 0x1F, 0x04, 0xC7, 0x09, 0x1F,
|
||||||
|
0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F,
|
||||||
|
0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F,
|
||||||
|
0x05, 0xC7, 0x45, 0x1F, 0x01, 0x81, 0x01, 0xC3, 0x47, 0xC6, 0x01, 0xC4, 0x01, 0x8A, 0x05, 0x1F,
|
||||||
|
0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x34, 0x01, 0x02,
|
||||||
|
0x03, 0x00, 0x01, 0x02, 0x01, 0x34, 0xFF, 0x1F, 0x4E, 0x1F, 0x04, 0xC7, 0x01, 0x1F, 0x04, 0xC7,
|
||||||
|
0x09, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7,
|
||||||
|
0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7,
|
||||||
|
0x07, 0x1F, 0x05, 0xC7, 0x8A, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D,
|
||||||
|
0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35,
|
||||||
|
0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x1F, 0x4D, 0x1F, 0x04, 0xC7, 0x01, 0x1F,
|
||||||
|
0x04, 0xC7, 0x09, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x12, 0x1F,
|
||||||
|
0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F,
|
||||||
|
0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x8B, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5,
|
||||||
|
0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F,
|
||||||
|
0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x1F, 0x4C, 0x1F, 0x04, 0xC7,
|
||||||
|
0x01, 0x1F, 0x04, 0xC7, 0x09, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x06, 0xC7, 0x06, 0x1F, 0x05, 0xC7,
|
||||||
|
0x12, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7,
|
||||||
|
0x07, 0x1F, 0x05, 0xC7, 0x8C, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D,
|
||||||
|
0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35,
|
||||||
|
0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x1F, 0x4A, 0x1F, 0x05, 0xC7, 0x01, 0x1F,
|
||||||
|
0x05, 0xC7, 0x13, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x12, 0x1F,
|
||||||
|
0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x8D, 0x1F,
|
||||||
|
0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71,
|
||||||
|
0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01,
|
||||||
|
0x01, 0x36, 0xFF, 0x1F, 0x49, 0x1F, 0x04, 0xC7, 0x02, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x06, 0xC7,
|
||||||
|
0x07, 0x1F, 0x0F, 0xC7, 0x08, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7,
|
||||||
|
0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x45, 0x1F, 0x01, 0x58, 0x01, 0x91, 0x40, 0x98,
|
||||||
|
0x01, 0x91, 0x01, 0x5D, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D,
|
||||||
|
0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x34,
|
||||||
|
0x01, 0x02, 0x03, 0x00, 0x01, 0x02, 0x01, 0x34, 0xFF, 0x1F, 0x48, 0x1F, 0x04, 0xC7, 0x03, 0x1F,
|
||||||
|
0x04, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x08, 0x1F, 0x10, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F,
|
||||||
|
0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x45, 0x1F,
|
||||||
|
0x01, 0x90, 0x42, 0x98, 0x01, 0x97, 0x01, 0x5E, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6,
|
||||||
|
0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56,
|
||||||
|
0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x1F, 0x47, 0x1F,
|
||||||
|
0x04, 0xC7, 0x03, 0x1F, 0x04, 0xC7, 0x11, 0x1F, 0x06, 0xC7, 0x08, 0x1F, 0x11, 0xC7, 0x06, 0x1F,
|
||||||
|
0x0F, 0xC7, 0x08, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F,
|
||||||
|
0x05, 0xC7, 0x45, 0x1F, 0x01, 0x90, 0x43, 0x98, 0x01, 0x97, 0x01, 0x5E, 0x05, 0x1F, 0x01, 0x86,
|
||||||
|
0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70,
|
||||||
|
0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36,
|
||||||
|
0xFF, 0x1F, 0x46, 0x1F, 0x04, 0xC7, 0x03, 0x1F, 0x04, 0xC7, 0x11, 0x1F, 0x05, 0xC7, 0x09, 0x1F,
|
||||||
|
0x11, 0xC7, 0x06, 0x1F, 0x10, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F,
|
||||||
|
0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x45, 0x1F, 0x01, 0x58, 0x01, 0x91, 0x43, 0x98, 0x01, 0x97,
|
||||||
|
0x01, 0x5E, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F,
|
||||||
|
0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02,
|
||||||
|
0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x1F, 0x45, 0x1F, 0x04, 0xC7, 0x03, 0x1F, 0x04, 0xC7,
|
||||||
|
0x10, 0x1F, 0x06, 0xC7, 0x09, 0x1F, 0x11, 0xC7, 0x06, 0x1F, 0x11, 0xC7, 0x06, 0x1F, 0x05, 0xC7,
|
||||||
|
0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x86, 0x1F, 0x01, 0x5C,
|
||||||
|
0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6,
|
||||||
|
0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56,
|
||||||
|
0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x1F, 0x43, 0x1F,
|
||||||
|
0x05, 0xC7, 0x03, 0x1F, 0x05, 0xC7, 0x0F, 0x1F, 0x05, 0xC7, 0x16, 0x1F, 0x05, 0xC7, 0x06, 0x1F,
|
||||||
|
0x11, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F,
|
||||||
|
0x05, 0xC7, 0x87, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F,
|
||||||
|
0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71,
|
||||||
|
0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01,
|
||||||
|
0x01, 0x36, 0xFF, 0x1F, 0x42, 0x1F, 0x05, 0xC7, 0x03, 0x1F, 0x05, 0xC7, 0x0E, 0x1F, 0x06, 0xC7,
|
||||||
|
0x16, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x11, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7,
|
||||||
|
0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x88, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98,
|
||||||
|
0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D,
|
||||||
|
0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35,
|
||||||
|
0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x1F, 0x41, 0x1F, 0x05, 0xC7, 0x03, 0x1F,
|
||||||
|
0x05, 0xC7, 0x0E, 0x1F, 0x05, 0xC7, 0x17, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F,
|
||||||
|
0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F,
|
||||||
|
0x05, 0xC7, 0x89, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F,
|
||||||
|
0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x54, 0x01, 0x71,
|
||||||
|
0x03, 0x70, 0x01, 0x71, 0x01, 0x54, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01,
|
||||||
|
0x01, 0x36, 0xFF, 0x1F, 0x40, 0x1F, 0x05, 0xC7, 0x03, 0x1F, 0x05, 0xC7, 0x0D, 0x1F, 0x06, 0xC7,
|
||||||
|
0x17, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7,
|
||||||
|
0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x45, 0x1F, 0x01, 0x5F,
|
||||||
|
0x01, 0xA6, 0x3C, 0xB9, 0x01, 0xA6, 0x01, 0x66, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98,
|
||||||
|
0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D,
|
||||||
|
0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35,
|
||||||
|
0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x1F, 0x3F, 0x1F, 0x04, 0xC7, 0x05, 0x1F,
|
||||||
|
0x04, 0xC7, 0x0D, 0x1F, 0x05, 0xC7, 0x18, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F,
|
||||||
|
0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F,
|
||||||
|
0x05, 0xC7, 0x45, 0x1F, 0x01, 0xA4, 0x3E, 0xB9, 0x01, 0xB5, 0x01, 0x68, 0x05, 0x1F, 0x01, 0x5C,
|
||||||
|
0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6,
|
||||||
|
0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56,
|
||||||
|
0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x1F, 0x3D, 0x1F,
|
||||||
|
0x05, 0xC7, 0x05, 0x1F, 0x05, 0xC7, 0x0B, 0x1F, 0x06, 0xC7, 0x18, 0x1F, 0x05, 0xC7, 0x06, 0x1F,
|
||||||
|
0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F,
|
||||||
|
0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x45, 0x1F, 0x01, 0xA4, 0x3F, 0xB9, 0x01, 0xB5, 0x01, 0x68,
|
||||||
|
0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86,
|
||||||
|
0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70,
|
||||||
|
0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36,
|
||||||
|
0xFF, 0x1F, 0x3C, 0x1F, 0x05, 0xC7, 0x05, 0x1F, 0x05, 0xC7, 0x0A, 0x1F, 0x06, 0xC7, 0x19, 0x1F,
|
||||||
|
0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F,
|
||||||
|
0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x45, 0x1F, 0x01, 0x5F, 0x01, 0xA6,
|
||||||
|
0x3F, 0xB9, 0x01, 0xB5, 0x01, 0x68, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96,
|
||||||
|
0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F,
|
||||||
|
0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02,
|
||||||
|
0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x1F, 0x3B, 0x1F, 0x0F, 0xC7, 0x0A, 0x1F, 0x06, 0xC7,
|
||||||
|
0x0D, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7,
|
||||||
|
0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7,
|
||||||
|
0x82, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C,
|
||||||
|
0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6,
|
||||||
|
0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x54, 0x01, 0x71, 0x03, 0x70, 0x01, 0x71, 0x01, 0x54,
|
||||||
|
0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x1F, 0x3A, 0x1F,
|
||||||
|
0x0F, 0xC7, 0x09, 0x1F, 0x06, 0xC7, 0x0E, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F,
|
||||||
|
0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F,
|
||||||
|
0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x83, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5,
|
||||||
|
0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F,
|
||||||
|
0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71,
|
||||||
|
0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01,
|
||||||
|
0x01, 0x36, 0xFF, 0x1F, 0x39, 0x1F, 0x0F, 0xC7, 0x09, 0x1F, 0x06, 0xC7, 0x0E, 0x1F, 0x05, 0xC7,
|
||||||
|
0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7,
|
||||||
|
0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x84, 0x1F, 0x01, 0x66,
|
||||||
|
0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98,
|
||||||
|
0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D,
|
||||||
|
0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35,
|
||||||
|
0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x1F, 0x38, 0x1F, 0x10, 0xC7, 0x07, 0x1F,
|
||||||
|
0x06, 0xC7, 0x0F, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F,
|
||||||
|
0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F,
|
||||||
|
0x05, 0xC7, 0x85, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F,
|
||||||
|
0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4,
|
||||||
|
0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72,
|
||||||
|
0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x1F,
|
||||||
|
0x36, 0x1F, 0x11, 0xC7, 0x07, 0x1F, 0x06, 0xC7, 0x0F, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7,
|
||||||
|
0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7,
|
||||||
|
0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x86, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9,
|
||||||
|
0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64,
|
||||||
|
0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52,
|
||||||
|
0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00,
|
||||||
|
0x01, 0x01, 0x01, 0x36, 0xFF, 0x1F, 0x35, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F,
|
||||||
|
0x06, 0xC7, 0x10, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F,
|
||||||
|
0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F,
|
||||||
|
0x05, 0xC7, 0x87, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F,
|
||||||
|
0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4,
|
||||||
|
0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72,
|
||||||
|
0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x1F,
|
||||||
|
0x34, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x06, 0xC7, 0x10, 0x1F, 0x05, 0xC7,
|
||||||
|
0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7,
|
||||||
|
0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x67, 0x1F, 0x01, 0x40,
|
||||||
|
0x01, 0x8F, 0x01, 0x93, 0x01, 0x47, 0x1D, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5,
|
||||||
|
0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F,
|
||||||
|
0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71,
|
||||||
|
0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01,
|
||||||
|
0x01, 0x36, 0xFF, 0x1F, 0x33, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x05, 0x1F, 0x06, 0xC7,
|
||||||
|
0x11, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7,
|
||||||
|
0x06, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x12, 0x1F, 0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7,
|
||||||
|
0x65, 0x1F, 0x01, 0x22, 0x01, 0x77, 0x01, 0xB7, 0x02, 0xC1, 0x01, 0xBB, 0x01, 0x7D, 0x01, 0x2B,
|
||||||
|
0x1C, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C,
|
||||||
|
0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x8A, 0x01, 0xC4, 0x03, 0xC6,
|
||||||
|
0x01, 0xC4, 0x01, 0x8A, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56,
|
||||||
|
0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x1F, 0x32, 0x1F,
|
||||||
|
0x05, 0xC7, 0x07, 0x1F, 0x05, 0xC7, 0x05, 0x1F, 0x11, 0xC7, 0x06, 0x1F, 0x11, 0xC7, 0x06, 0x1F,
|
||||||
|
0x11, 0xC7, 0x06, 0x1F, 0x11, 0xC7, 0x12, 0x1F, 0x11, 0xC7, 0x64, 0x1F, 0x01, 0x4F, 0x01, 0x9C,
|
||||||
|
0x06, 0xC1, 0x01, 0xA8, 0x01, 0x6D, 0x1C, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5,
|
||||||
|
0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F,
|
||||||
|
0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71,
|
||||||
|
0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01,
|
||||||
|
0x01, 0x36, 0xFF, 0x1F, 0x30, 0x1F, 0x06, 0xC7, 0x08, 0x1F, 0x05, 0xC7, 0x03, 0x1F, 0x12, 0xC7,
|
||||||
|
0x06, 0x1F, 0x11, 0xC7, 0x06, 0x1F, 0x11, 0xC7, 0x06, 0x1F, 0x11, 0xC7, 0x12, 0x1F, 0x11, 0xC7,
|
||||||
|
0x62, 0x1F, 0x01, 0x2C, 0x01, 0x7D, 0x01, 0xBE, 0x09, 0xC1, 0x01, 0x93, 0x01, 0x47, 0x1B, 0x1F,
|
||||||
|
0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97,
|
||||||
|
0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5,
|
||||||
|
0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F,
|
||||||
|
0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x1F, 0x2F, 0x1F, 0x05, 0xC7,
|
||||||
|
0x09, 0x1F, 0x05, 0xC7, 0x03, 0x1F, 0x12, 0xC7, 0x06, 0x1F, 0x11, 0xC7, 0x06, 0x1F, 0x11, 0xC7,
|
||||||
|
0x06, 0x1F, 0x11, 0xC7, 0x12, 0x1F, 0x11, 0xC7, 0x61, 0x1F, 0x01, 0x63, 0x01, 0xA3, 0x0C, 0xC1,
|
||||||
|
0x01, 0xBB, 0x01, 0x7D, 0x01, 0x2B, 0x1A, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5,
|
||||||
|
0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F,
|
||||||
|
0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71,
|
||||||
|
0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01,
|
||||||
|
0x01, 0x36, 0xFF, 0x1F, 0x2E, 0x1F, 0x05, 0xC7, 0x09, 0x1F, 0x05, 0xC7, 0x03, 0x1F, 0x12, 0xC7,
|
||||||
|
0x07, 0x1F, 0x0F, 0xC7, 0x08, 0x1F, 0x0F, 0xC7, 0x08, 0x1F, 0x0F, 0xC7, 0x14, 0x1F, 0x0F, 0xC7,
|
||||||
|
0x60, 0x1F, 0x01, 0x33, 0x01, 0x88, 0x06, 0xC1, 0x01, 0xA5, 0x01, 0x76, 0x01, 0x3B, 0x01, 0x8E,
|
||||||
|
0x06, 0xC1, 0x01, 0xA8, 0x01, 0x6D, 0x1A, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5,
|
||||||
|
0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F,
|
||||||
|
0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71,
|
||||||
|
0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01,
|
||||||
|
0x01, 0x36, 0xFF, 0x1F, 0x2D, 0x1F, 0x05, 0xC7, 0x09, 0x1F, 0x05, 0xC7, 0x03, 0x1F, 0x12, 0xC7,
|
||||||
|
0x08, 0x1F, 0x0D, 0xC7, 0x0A, 0x1F, 0x0D, 0xC7, 0x0A, 0x1F, 0x0D, 0xC7, 0x16, 0x1F, 0x0D, 0xC7,
|
||||||
|
0x60, 0x1F, 0x01, 0x73, 0x01, 0xB1, 0x05, 0xC1, 0x01, 0xAC, 0x01, 0x7B, 0x01, 0x49, 0x01, 0x48,
|
||||||
|
0x02, 0x17, 0x01, 0x3B, 0x01, 0x8E, 0x06, 0xC1, 0x01, 0x93, 0x01, 0x47, 0x19, 0x1F, 0x01, 0x66,
|
||||||
|
0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98,
|
||||||
|
0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x8A, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC4, 0x01, 0x8A,
|
||||||
|
0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35,
|
||||||
|
0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x1F, 0xFF, 0x1F, 0x19, 0x1F, 0x01, 0x47,
|
||||||
|
0x01, 0x95, 0x05, 0xC1, 0x01, 0xB2, 0x01, 0x7E, 0x01, 0x4C, 0x03, 0x48, 0x04, 0x17, 0x01, 0x3B,
|
||||||
|
0x01, 0x8E, 0x05, 0xC1, 0x01, 0xBB, 0x01, 0x7D, 0x01, 0x2B, 0x18, 0x1F, 0x01, 0x66, 0x01, 0xB5,
|
||||||
|
0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96,
|
||||||
|
0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F,
|
||||||
|
0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02,
|
||||||
|
0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x1F, 0xFF, 0x1F, 0x16, 0x1F, 0x01, 0x27, 0x01, 0x79,
|
||||||
|
0x01, 0xB8, 0x04, 0xC1, 0x01, 0xBA, 0x01, 0x84, 0x01, 0x4E, 0x05, 0x48, 0x06, 0x17, 0x01, 0x3B,
|
||||||
|
0x01, 0x8E, 0x05, 0xC1, 0x01, 0xA8, 0x01, 0x6D, 0x18, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9,
|
||||||
|
0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64,
|
||||||
|
0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52,
|
||||||
|
0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00,
|
||||||
|
0x01, 0x01, 0x01, 0x36, 0xFF, 0x1F, 0xFF, 0x1F, 0x14, 0x1F, 0x01, 0x55, 0x01, 0xA0, 0x04, 0xC1,
|
||||||
|
0x01, 0xBF, 0x01, 0x8C, 0x01, 0x59, 0x07, 0x48, 0x08, 0x17, 0x01, 0x3B, 0x01, 0x8E, 0x05, 0xC1,
|
||||||
|
0x01, 0x93, 0x01, 0x47, 0x17, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C,
|
||||||
|
0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86,
|
||||||
|
0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70,
|
||||||
|
0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0x11, 0x1F, 0x01, 0x2D, 0x01, 0x80, 0x01, 0xBF, 0x04, 0xC1, 0x01, 0x92,
|
||||||
|
0x01, 0x62, 0x09, 0x48, 0x0A, 0x17, 0x01, 0x3B, 0x01, 0x8E, 0x04, 0xC1, 0x01, 0xBB, 0x01, 0x7D,
|
||||||
|
0x01, 0x2B, 0x16, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F,
|
||||||
|
0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4,
|
||||||
|
0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72,
|
||||||
|
0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0x0F, 0x1F, 0x01, 0x6D, 0x01, 0xAB, 0x04, 0xC1, 0x01, 0x99, 0x01, 0x6A, 0x0B, 0x48,
|
||||||
|
0x0C, 0x17, 0x01, 0x3B, 0x01, 0x8E, 0x04, 0xC1, 0x01, 0xA8, 0x01, 0x6D, 0x16, 0x1F, 0x01, 0x66,
|
||||||
|
0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98,
|
||||||
|
0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D,
|
||||||
|
0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35,
|
||||||
|
0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x1F, 0xFF, 0x1F, 0x0E, 0x1F, 0x06, 0xC1,
|
||||||
|
0x0D, 0x48, 0x0E, 0x17, 0x06, 0xC1, 0x17, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5,
|
||||||
|
0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F,
|
||||||
|
0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71,
|
||||||
|
0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01,
|
||||||
|
0x01, 0x36, 0xFF, 0x1F, 0xFF, 0x1F, 0x0D, 0x1F, 0x06, 0xC1, 0x0D, 0x48, 0x0E, 0x17, 0x06, 0xC1,
|
||||||
|
0x18, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5E,
|
||||||
|
0x01, 0x97, 0x03, 0x98, 0x01, 0x97, 0x01, 0x5E, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6,
|
||||||
|
0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56,
|
||||||
|
0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0x03, 0x00, 0x01, 0x01, 0x01, 0x36, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0x0C, 0x1F, 0x06, 0xC1, 0x0D, 0x48, 0x0E, 0x17, 0x06, 0xC1, 0x19, 0x1F, 0x01, 0x66, 0x01, 0xB5,
|
||||||
|
0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96,
|
||||||
|
0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F,
|
||||||
|
0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x34, 0x01, 0x02,
|
||||||
|
0xFF, 0x00, 0xC0, 0x00, 0x01, 0x12, 0x01, 0x38, 0x4D, 0x1F, 0x06, 0xC1, 0x0D, 0x48, 0x0E, 0x17,
|
||||||
|
0x06, 0xC1, 0x1A, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F,
|
||||||
|
0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4,
|
||||||
|
0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72,
|
||||||
|
0x01, 0x56, 0x05, 0x1F, 0x01, 0x34, 0x01, 0x02, 0xFF, 0x00, 0xC0, 0x00, 0x01, 0x14, 0x4D, 0x1F,
|
||||||
|
0x06, 0xC1, 0x0D, 0x48, 0x0E, 0x17, 0x06, 0xC1, 0x1B, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9,
|
||||||
|
0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64,
|
||||||
|
0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52,
|
||||||
|
0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F, 0x01, 0x35, 0x01, 0x02, 0xFF, 0x00,
|
||||||
|
0xBF, 0x00, 0x01, 0x14, 0x4D, 0x1F, 0x06, 0xC1, 0x0D, 0x48, 0x0E, 0x17, 0x06, 0xC1, 0x1C, 0x1F,
|
||||||
|
0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97,
|
||||||
|
0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5,
|
||||||
|
0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0x05, 0x1F,
|
||||||
|
0x01, 0x37, 0x01, 0x12, 0xFF, 0x00, 0xBD, 0x00, 0x01, 0x12, 0x01, 0x38, 0x4D, 0x1F, 0x06, 0xC1,
|
||||||
|
0x0D, 0x48, 0x0E, 0x17, 0x06, 0xC1, 0x1D, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5,
|
||||||
|
0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5E, 0x01, 0x97, 0x03, 0x98, 0x01, 0x97, 0x01, 0x5E, 0x05, 0x1F,
|
||||||
|
0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71,
|
||||||
|
0x03, 0x70, 0x01, 0x72, 0x01, 0x56, 0xFF, 0x1F, 0xFF, 0x1F, 0x13, 0x1F, 0x06, 0xC1, 0x0D, 0x48,
|
||||||
|
0x0E, 0x17, 0x06, 0xC1, 0x1E, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C,
|
||||||
|
0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86,
|
||||||
|
0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70,
|
||||||
|
0x01, 0x72, 0x01, 0x56, 0xFF, 0x1F, 0xFF, 0x1F, 0x12, 0x1F, 0x06, 0xC1, 0x0D, 0x48, 0x0E, 0x17,
|
||||||
|
0x06, 0xC1, 0x1F, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F,
|
||||||
|
0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4,
|
||||||
|
0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72,
|
||||||
|
0x01, 0x56, 0xFF, 0x1F, 0xFF, 0x1F, 0x11, 0x1F, 0x06, 0xC1, 0x0D, 0x48, 0x0E, 0x17, 0x06, 0xC1,
|
||||||
|
0x20, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C,
|
||||||
|
0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6,
|
||||||
|
0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0x03, 0x70, 0x01, 0x72, 0x01, 0x56,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0x10, 0x1F, 0x06, 0xC1, 0x0D, 0x48, 0x0E, 0x17, 0x06, 0xC1, 0x21, 0x1F,
|
||||||
|
0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97,
|
||||||
|
0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5,
|
||||||
|
0x01, 0x8D, 0x05, 0x1F, 0x01, 0x54, 0x01, 0x71, 0xFF, 0x70, 0xC4, 0x70, 0x01, 0x6E, 0x01, 0x4D,
|
||||||
|
0x4D, 0x1F, 0x06, 0xC1, 0x0D, 0x48, 0x0E, 0x17, 0x06, 0xC1, 0x22, 0x1F, 0x01, 0x66, 0x01, 0xB5,
|
||||||
|
0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96,
|
||||||
|
0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F,
|
||||||
|
0x01, 0x54, 0x01, 0x71, 0xFF, 0x70, 0xC4, 0x70, 0x01, 0x6F, 0x4D, 0x1F, 0x06, 0xC1, 0x0B, 0x48,
|
||||||
|
0x01, 0x42, 0x01, 0x1A, 0x01, 0x09, 0x01, 0x15, 0x0C, 0x17, 0x06, 0xC1, 0x23, 0x1F, 0x01, 0x66,
|
||||||
|
0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98,
|
||||||
|
0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D,
|
||||||
|
0x05, 0x1F, 0x01, 0x52, 0x01, 0x71, 0xFF, 0x70, 0xC3, 0x70, 0x01, 0x6F, 0x4D, 0x1F, 0x06, 0xC1,
|
||||||
|
0x0A, 0x48, 0x01, 0x2E, 0x01, 0x0F, 0x01, 0x08, 0x01, 0x03, 0x01, 0x04, 0x01, 0x0E, 0x0B, 0x17,
|
||||||
|
0x06, 0xC1, 0x24, 0x1F, 0x01, 0x68, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x68, 0x05, 0x1F,
|
||||||
|
0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4,
|
||||||
|
0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0x05, 0x1F, 0x01, 0x50, 0x01, 0x6E, 0xFF, 0x70, 0xC1, 0x70,
|
||||||
|
0x01, 0x6E, 0x01, 0x4D, 0x4D, 0x1F, 0x06, 0xC1, 0x08, 0x48, 0x01, 0x44, 0x01, 0x1E, 0x03, 0x08,
|
||||||
|
0x03, 0x03, 0x01, 0x08, 0x01, 0x13, 0x09, 0x17, 0x06, 0xC1, 0x25, 0x1F, 0x01, 0x66, 0x01, 0xB5,
|
||||||
|
0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96,
|
||||||
|
0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0x17, 0x1F, 0x06, 0xC1, 0x07, 0x48, 0x01, 0x32, 0x01, 0x11, 0x04, 0x08, 0x05, 0x03,
|
||||||
|
0x01, 0x0D, 0x01, 0x16, 0x07, 0x17, 0x06, 0xC1, 0x26, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9,
|
||||||
|
0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64,
|
||||||
|
0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0x16, 0x1F, 0x06, 0xC1, 0x05, 0x48, 0x01, 0x46, 0x01, 0x21, 0x01, 0x09, 0x05, 0x08, 0x06, 0x03,
|
||||||
|
0x01, 0x06, 0x01, 0x11, 0x06, 0x17, 0x06, 0xC1, 0x27, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9,
|
||||||
|
0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64,
|
||||||
|
0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5, 0x01, 0x8D, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0x15, 0x1F, 0x06, 0xC1, 0x01, 0x99, 0x01, 0x6A, 0x02, 0x48, 0x01, 0x3C, 0x01, 0x16, 0x07, 0x08,
|
||||||
|
0x08, 0x03, 0x01, 0x0C, 0x01, 0x16, 0x02, 0x17, 0x01, 0x3B, 0x01, 0x8E, 0x06, 0xC1, 0x28, 0x1F,
|
||||||
|
0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97,
|
||||||
|
0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0x03, 0xC6, 0x01, 0xC5,
|
||||||
|
0x01, 0x8D, 0xFF, 0x1F, 0xFF, 0x1F, 0x14, 0x1F, 0x08, 0xC1, 0x01, 0x92, 0x01, 0x30, 0x01, 0x0A,
|
||||||
|
0x08, 0x08, 0x09, 0x03, 0x01, 0x05, 0x01, 0x26, 0x01, 0x8E, 0x08, 0xC1, 0x29, 0x1F, 0x01, 0x68,
|
||||||
|
0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x68, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98,
|
||||||
|
0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x8A, 0x01, 0xC4, 0xFF, 0xC6, 0xC8, 0xC6, 0x01, 0xC3,
|
||||||
|
0x01, 0x81, 0x4D, 0x1F, 0x07, 0xC1, 0x01, 0xA9, 0x01, 0x44, 0x01, 0x13, 0x01, 0x0F, 0x01, 0x09,
|
||||||
|
0x07, 0x08, 0x08, 0x03, 0x01, 0x07, 0x01, 0x0F, 0x01, 0x15, 0x01, 0x57, 0x01, 0xAE, 0x07, 0xC1,
|
||||||
|
0x2A, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C,
|
||||||
|
0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x8A, 0x01, 0xC4, 0xFF, 0xC6,
|
||||||
|
0xC8, 0xC6, 0x01, 0xC2, 0x4D, 0x1F, 0x06, 0xC1, 0x01, 0x82, 0x01, 0x1B, 0x04, 0x13, 0x01, 0x0E,
|
||||||
|
0x06, 0x08, 0x06, 0x03, 0x01, 0x07, 0x01, 0x0F, 0x04, 0x13, 0x01, 0x1D, 0x01, 0x82, 0x06, 0xC1,
|
||||||
|
0x2B, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C,
|
||||||
|
0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x86, 0x01, 0xC4, 0xFF, 0xC6,
|
||||||
|
0xC7, 0xC6, 0x01, 0xC2, 0x4D, 0x1F, 0x06, 0xC1, 0x01, 0x89, 0x01, 0x20, 0x05, 0x13, 0x01, 0x11,
|
||||||
|
0x01, 0x0D, 0x04, 0x08, 0x04, 0x03, 0x01, 0x07, 0x01, 0x0F, 0x06, 0x13, 0x01, 0x24, 0x01, 0x89,
|
||||||
|
0x06, 0xC1, 0x2C, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F,
|
||||||
|
0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0x05, 0x1F, 0x01, 0x85, 0x01, 0xC3,
|
||||||
|
0xFF, 0xC6, 0xC5, 0xC6, 0x01, 0xC3, 0x01, 0x81, 0x4D, 0x1F, 0x07, 0xC1, 0x01, 0xB6, 0x01, 0x74,
|
||||||
|
0x01, 0x18, 0x05, 0x13, 0x01, 0x11, 0x01, 0x0D, 0x02, 0x08, 0x02, 0x03, 0x01, 0x07, 0x01, 0x0F,
|
||||||
|
0x06, 0x13, 0x01, 0x1A, 0x01, 0x78, 0x01, 0xBD, 0x07, 0xC1, 0x2D, 0x1F, 0x01, 0x66, 0x01, 0xB5,
|
||||||
|
0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96,
|
||||||
|
0x01, 0x64, 0xFF, 0x1F, 0xFF, 0x1F, 0x1B, 0x1F, 0x09, 0xC1, 0x01, 0x9F, 0x01, 0x3E, 0x06, 0x13,
|
||||||
|
0x01, 0x10, 0x01, 0x0B, 0x01, 0x07, 0x01, 0x0F, 0x06, 0x13, 0x01, 0x16, 0x01, 0x60, 0x01, 0xAE,
|
||||||
|
0x09, 0xC1, 0x2E, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F,
|
||||||
|
0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0xFF, 0x1F, 0xFF, 0x1F, 0x1A, 0x1F,
|
||||||
|
0x01, 0x67, 0x01, 0xA2, 0x09, 0xC1, 0x01, 0x7F, 0x01, 0x1C, 0x0D, 0x13, 0x01, 0x3F, 0x01, 0x9B,
|
||||||
|
0x09, 0xC1, 0x01, 0xA2, 0x01, 0x6B, 0x2F, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5,
|
||||||
|
0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C, 0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0x1A, 0x1F, 0x01, 0x28, 0x01, 0x79, 0x01, 0xB4, 0x08, 0xC1, 0x01, 0xAF, 0x01, 0x69,
|
||||||
|
0x01, 0x15, 0x09, 0x13, 0x01, 0x24, 0x01, 0x89, 0x09, 0xC1, 0x01, 0xAD, 0x01, 0x77, 0x01, 0x25,
|
||||||
|
0x31, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C,
|
||||||
|
0x01, 0x97, 0x03, 0x98, 0x01, 0x96, 0x01, 0x64, 0xFF, 0x1F, 0xFF, 0x1F, 0x1B, 0x1F, 0x01, 0x3A,
|
||||||
|
0x01, 0x83, 0x01, 0xBF, 0x08, 0xC1, 0x01, 0x92, 0x01, 0x29, 0x06, 0x13, 0x01, 0x1A, 0x01, 0x78,
|
||||||
|
0x01, 0xBD, 0x08, 0xC1, 0x01, 0xB8, 0x01, 0x7D, 0x01, 0x2C, 0x34, 0x1F, 0x01, 0x66, 0x01, 0xB5,
|
||||||
|
0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5E, 0x01, 0x97, 0xFF, 0x98, 0xCC, 0x98,
|
||||||
|
0x01, 0x91, 0x01, 0x58, 0x52, 0x1F, 0x01, 0x55, 0x01, 0x9A, 0x08, 0xC1, 0x01, 0xBD, 0x01, 0x7A,
|
||||||
|
0x01, 0x19, 0x02, 0x13, 0x01, 0x16, 0x01, 0x60, 0x01, 0xAE, 0x08, 0xC1, 0x01, 0xBE, 0x01, 0x88,
|
||||||
|
0x01, 0x3D, 0x37, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F,
|
||||||
|
0x01, 0x5E, 0x01, 0x97, 0xFF, 0x98, 0xCC, 0x98, 0x01, 0x90, 0x54, 0x1F, 0x01, 0x6D, 0x01, 0xAA,
|
||||||
|
0x08, 0xC1, 0x01, 0xA1, 0x01, 0x48, 0x01, 0x43, 0x01, 0x9D, 0x09, 0xC1, 0x01, 0x93, 0x01, 0x4A,
|
||||||
|
0x3A, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5C,
|
||||||
|
0x01, 0x97, 0xFF, 0x98, 0xCB, 0x98, 0x01, 0x90, 0x55, 0x1F, 0x01, 0x2C, 0x01, 0x7C, 0x01, 0xB8,
|
||||||
|
0x11, 0xC1, 0x01, 0x9E, 0x01, 0x61, 0x3D, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5,
|
||||||
|
0x01, 0x6C, 0x05, 0x1F, 0x01, 0x5B, 0x01, 0x91, 0xFF, 0x98, 0xC9, 0x98, 0x01, 0x91, 0x01, 0x58,
|
||||||
|
0x57, 0x1F, 0x01, 0x41, 0x01, 0x8B, 0x0E, 0xC1, 0x01, 0xA7, 0x01, 0x73, 0x01, 0x22, 0x3F, 0x1F,
|
||||||
|
0x01, 0x66, 0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0xFF, 0x1F, 0xFF, 0x1F, 0x2B, 0x1F,
|
||||||
|
0x01, 0x5A, 0x01, 0x9C, 0x0A, 0xC1, 0x01, 0xB3, 0x01, 0x7C, 0x01, 0x2A, 0x42, 0x1F, 0x01, 0x66,
|
||||||
|
0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0xFF, 0x1F, 0xFF, 0x1F, 0x2B, 0x1F, 0x01, 0x23,
|
||||||
|
0x01, 0x75, 0x01, 0xB0, 0x06, 0xC1, 0x01, 0xBB, 0x01, 0x80, 0x01, 0x31, 0x45, 0x1F, 0x01, 0x66,
|
||||||
|
0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0xFF, 0x1F, 0xFF, 0x1F, 0x2C, 0x1F, 0x01, 0x2F,
|
||||||
|
0x01, 0x7D, 0x01, 0xBC, 0x02, 0xC1, 0x01, 0xC0, 0x01, 0x8F, 0x01, 0x45, 0x48, 0x1F, 0x01, 0x66,
|
||||||
|
0x01, 0xB5, 0x03, 0xB9, 0x01, 0xB5, 0x01, 0x6C, 0xFF, 0x1F, 0xFF, 0x1F, 0x2D, 0x1F, 0x01, 0x4B,
|
||||||
|
0x01, 0x94, 0x01, 0x95, 0x01, 0x51, 0x4B, 0x1F, 0x01, 0x68, 0x01, 0xB5, 0xFF, 0xB9, 0xD0, 0xB9,
|
||||||
|
0x01, 0xA6, 0x01, 0x5F, 0xAE, 0x1F, 0x01, 0x68, 0x01, 0xB5, 0xFF, 0xB9, 0xD0, 0xB9, 0x01, 0xA4,
|
||||||
|
0xAF, 0x1F, 0x01, 0x66, 0x01, 0xB5, 0xFF, 0xB9, 0xCF, 0xB9, 0x01, 0xA4, 0xB0, 0x1F, 0x01, 0x65,
|
||||||
|
0x01, 0xA6, 0xFF, 0xB9, 0xCD, 0xB9, 0x01, 0xA6, 0x01, 0x5F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x1F,
|
||||||
|
0x69, 0x1F, 0x00, 0x00
|
||||||
|
}
|
BIN
src/rsrc/font/MSX_ASCII.bin
Normal file
BIN
src/rsrc/font/MSX_ASCII.bin
Normal file
Binary file not shown.
BIN
src/rsrc/font/MSX_CP437_8x8.bin
Normal file
BIN
src/rsrc/font/MSX_CP437_8x8.bin
Normal file
Binary file not shown.
173
src/rsrc/font/MSX_CP437_8x8.h
Normal file
173
src/rsrc/font/MSX_CP437_8x8.h
Normal file
|
@ -0,0 +1,173 @@
|
||||||
|
unsigned char MSX_CP437_8x8_bin[] = {
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81,
|
||||||
|
0xbd, 0x99, 0x81, 0x7e, 0x7e, 0xff, 0xdb, 0xff, 0xff, 0xc3, 0xe7, 0x7e,
|
||||||
|
0x00, 0x6c, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x10, 0x38, 0x7c, 0xfe,
|
||||||
|
0x7c, 0x38, 0x10, 0x00, 0x38, 0x38, 0xfe, 0xfe, 0x54, 0x10, 0x7c, 0x00,
|
||||||
|
0x10, 0x38, 0x7c, 0xfe, 0xfe, 0x38, 0x7c, 0x00, 0x00, 0x00, 0x18, 0x3c,
|
||||||
|
0x3c, 0x18, 0x00, 0x00, 0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff,
|
||||||
|
0x00, 0x18, 0x24, 0x42, 0x42, 0x24, 0x18, 0x00, 0xff, 0xe7, 0xdb, 0xbd,
|
||||||
|
0xbd, 0xdb, 0xe7, 0xff, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff,
|
||||||
|
0xff, 0xfe, 0xfc, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x30, 0x28, 0x24, 0x24,
|
||||||
|
0x28, 0x20, 0xe0, 0xc0, 0x3c, 0x24, 0x3c, 0x24, 0x24, 0xe4, 0xdc, 0x18,
|
||||||
|
0x10, 0x54, 0x28, 0xc6, 0x28, 0x54, 0x10, 0x00, 0x20, 0x30, 0x38, 0x3c,
|
||||||
|
0x38, 0x30, 0x20, 0x00, 0x04, 0x0c, 0x1c, 0x3c, 0x1c, 0x0c, 0x04, 0x00,
|
||||||
|
0x10, 0x38, 0x7c, 0x10, 0x10, 0x7c, 0x38, 0x10, 0x48, 0x48, 0x48, 0x48,
|
||||||
|
0x48, 0x00, 0x48, 0x00, 0x3e, 0x4a, 0x4a, 0x3a, 0x0a, 0x0a, 0x0a, 0x00,
|
||||||
|
0x1c, 0x20, 0x18, 0x24, 0x24, 0x18, 0x04, 0x38, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x7e, 0x7e, 0x00, 0x10, 0x38, 0x7c, 0x10, 0x7c, 0x38, 0x10, 0xff,
|
||||||
|
0x10, 0x38, 0x54, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
|
||||||
|
0x10, 0x54, 0x38, 0x10, 0x00, 0x20, 0x40, 0xff, 0x40, 0x20, 0x00, 0x00,
|
||||||
|
0x00, 0x04, 0x02, 0xff, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40,
|
||||||
|
0x7c, 0x00, 0x00, 0x00, 0x00, 0x24, 0x42, 0xff, 0x42, 0x24, 0x00, 0x00,
|
||||||
|
0x00, 0x10, 0x38, 0x7c, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7c, 0x38,
|
||||||
|
0x10, 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, 0x18, 0x24, 0x40, 0x40, 0x24, 0x18, 0x08, 0x30,
|
||||||
|
0x48, 0x00, 0x48, 0x48, 0x48, 0x48, 0x34, 0x00, 0x08, 0x10, 0x38, 0x44,
|
||||||
|
0x7c, 0x40, 0x38, 0x00, 0x10, 0x28, 0x38, 0x04, 0x3c, 0x44, 0x3c, 0x00,
|
||||||
|
0x28, 0x00, 0x38, 0x04, 0x3c, 0x44, 0x3c, 0x00, 0x20, 0x10, 0x38, 0x04,
|
||||||
|
0x3c, 0x44, 0x3c, 0x00, 0x38, 0x28, 0x38, 0x04, 0x3c, 0x44, 0x3c, 0x00,
|
||||||
|
0x00, 0x38, 0x44, 0x40, 0x44, 0x38, 0x10, 0x30, 0x10, 0x28, 0x38, 0x44,
|
||||||
|
0x7c, 0x40, 0x38, 0x00, 0x28, 0x00, 0x38, 0x44, 0x7c, 0x40, 0x38, 0x00,
|
||||||
|
0x20, 0x10, 0x38, 0x44, 0x7c, 0x40, 0x38, 0x00, 0x28, 0x00, 0x00, 0x30,
|
||||||
|
0x10, 0x10, 0x38, 0x00, 0x10, 0x28, 0x00, 0x30, 0x10, 0x10, 0x38, 0x00,
|
||||||
|
0x20, 0x10, 0x00, 0x30, 0x10, 0x10, 0x38, 0x00, 0x28, 0x00, 0x10, 0x28,
|
||||||
|
0x44, 0x7c, 0x44, 0x00, 0x10, 0x28, 0x10, 0x28, 0x44, 0x7c, 0x44, 0x00,
|
||||||
|
0x08, 0x10, 0x7c, 0x40, 0x78, 0x40, 0x7c, 0x00, 0x00, 0x00, 0x6e, 0x10,
|
||||||
|
0x7c, 0x90, 0x6e, 0x00, 0x3e, 0x50, 0x90, 0xfc, 0x90, 0x90, 0x9e, 0x00,
|
||||||
|
0x10, 0x28, 0x38, 0x44, 0x44, 0x44, 0x38, 0x00, 0x28, 0x00, 0x38, 0x44,
|
||||||
|
0x44, 0x44, 0x38, 0x00, 0x20, 0x10, 0x38, 0x44, 0x44, 0x44, 0x38, 0x00,
|
||||||
|
0x10, 0x28, 0x00, 0x48, 0x48, 0x48, 0x34, 0x00, 0x20, 0x10, 0x00, 0x48,
|
||||||
|
0x48, 0x48, 0x34, 0x00, 0x28, 0x00, 0x44, 0x44, 0x4c, 0x34, 0x04, 0x38,
|
||||||
|
0x28, 0x38, 0x44, 0x44, 0x44, 0x44, 0x38, 0x00, 0x28, 0x00, 0x44, 0x44,
|
||||||
|
0x44, 0x44, 0x38, 0x00, 0x00, 0x10, 0x38, 0x54, 0x50, 0x54, 0x38, 0x10,
|
||||||
|
0x18, 0x24, 0x20, 0x78, 0x20, 0x22, 0x7c, 0x00, 0x44, 0x44, 0x28, 0x7c,
|
||||||
|
0x10, 0x7c, 0x10, 0x00, 0x38, 0x44, 0xf0, 0x40, 0xf0, 0x44, 0x38, 0x00,
|
||||||
|
0x18, 0x24, 0x20, 0x70, 0x20, 0x20, 0x20, 0xc0, 0x08, 0x10, 0x38, 0x04,
|
||||||
|
0x3c, 0x44, 0x3c, 0x00, 0x10, 0x20, 0x00, 0x30, 0x10, 0x10, 0x38, 0x00,
|
||||||
|
0x08, 0x10, 0x38, 0x44, 0x44, 0x44, 0x38, 0x00, 0x10, 0x20, 0x00, 0x48,
|
||||||
|
0x48, 0x48, 0x34, 0x00, 0x28, 0x50, 0x00, 0x58, 0x64, 0x44, 0x44, 0x00,
|
||||||
|
0x14, 0x28, 0x44, 0x64, 0x54, 0x4c, 0x44, 0x00, 0x30, 0x08, 0x38, 0x48,
|
||||||
|
0x38, 0x00, 0x00, 0x00, 0x10, 0x28, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x10, 0x00, 0x10, 0x20, 0x40, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, 0x7c,
|
||||||
|
0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x04, 0x04, 0x00, 0x00,
|
||||||
|
0x42, 0x44, 0x4e, 0x52, 0x2e, 0x48, 0x8e, 0x00, 0x42, 0x44, 0x4a, 0x5a,
|
||||||
|
0x2e, 0x42, 0x82, 0x00, 0x10, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00,
|
||||||
|
0x00, 0x12, 0x24, 0x48, 0x24, 0x12, 0x00, 0x00, 0x00, 0x90, 0x48, 0x24,
|
||||||
|
0x48, 0x90, 0x00, 0x00, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22,
|
||||||
|
0xcc, 0x33, 0xcc, 0x33, 0xcc, 0x33, 0xcc, 0x33, 0xee, 0xbb, 0xee, 0xbb,
|
||||||
|
0xee, 0xbb, 0xee, 0xbb, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
|
||||||
|
0x10, 0x10, 0x10, 0xf0, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xf0, 0x10,
|
||||||
|
0xf0, 0x10, 0x10, 0x10, 0x28, 0x28, 0x28, 0xe8, 0x28, 0x28, 0x28, 0x28,
|
||||||
|
0x00, 0x00, 0x00, 0xf8, 0x28, 0x28, 0x28, 0x28, 0x00, 0x00, 0xf0, 0x10,
|
||||||
|
0xf0, 0x10, 0x10, 0x10, 0x28, 0x28, 0xe8, 0x08, 0xe8, 0x28, 0x28, 0x28,
|
||||||
|
0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x00, 0x00, 0xf8, 0x08,
|
||||||
|
0xe8, 0x28, 0x28, 0x28, 0x28, 0x28, 0xe8, 0x08, 0xf8, 0x00, 0x00, 0x00,
|
||||||
|
0x28, 0x28, 0x28, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0xf0, 0x10,
|
||||||
|
0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x10, 0x10, 0x10, 0x10,
|
||||||
|
0x10, 0x10, 0x10, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0xff,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x10, 0x10, 0x10, 0x10,
|
||||||
|
0x10, 0x10, 0x10, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0xff,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0xff, 0x10, 0x10, 0x10, 0x10,
|
||||||
|
0x10, 0x10, 0x1f, 0x10, 0x1f, 0x10, 0x10, 0x10, 0x28, 0x28, 0x28, 0x2f,
|
||||||
|
0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x2f, 0x20, 0x3f, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x3f, 0x20, 0x2f, 0x28, 0x28, 0x28, 0x28, 0x28, 0xef, 0x00,
|
||||||
|
0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xef, 0x28, 0x28, 0x28,
|
||||||
|
0x28, 0x28, 0x2f, 0x20, 0x2f, 0x28, 0x28, 0x28, 0x00, 0x00, 0xff, 0x00,
|
||||||
|
0xff, 0x00, 0x00, 0x00, 0x28, 0x28, 0xef, 0x00, 0xef, 0x28, 0x28, 0x28,
|
||||||
|
0x10, 0x10, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x28, 0x28, 0x28, 0xff,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x10, 0x10, 0x10,
|
||||||
|
0x00, 0x00, 0x00, 0xff, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x3f,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x1f, 0x10, 0x1f, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x3f,
|
||||||
|
0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0xff, 0x28, 0x28, 0x28, 0x28,
|
||||||
|
0x10, 0x10, 0xff, 0x10, 0xff, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xf0,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x10, 0x10, 0x10, 0x10,
|
||||||
|
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, 0x00, 0x00, 0x34, 0x48, 0x48, 0x48, 0x34, 0x00,
|
||||||
|
0x00, 0x00, 0x38, 0x44, 0x78, 0x44, 0x78, 0x40, 0x7c, 0x40, 0x40, 0x40,
|
||||||
|
0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x7e, 0x24, 0x24, 0x24, 0x24, 0x00,
|
||||||
|
0x7c, 0x40, 0x20, 0x10, 0x20, 0x40, 0x7c, 0x00, 0x00, 0x00, 0x3e, 0x44,
|
||||||
|
0x44, 0x44, 0x38, 0x00, 0x00, 0x00, 0x48, 0x48, 0x48, 0x48, 0x70, 0x80,
|
||||||
|
0x00, 0x00, 0x34, 0x58, 0x10, 0x10, 0x10, 0x00, 0x7c, 0x10, 0x28, 0x44,
|
||||||
|
0x28, 0x10, 0x7c, 0x00, 0x38, 0x44, 0x44, 0x7c, 0x44, 0x44, 0x38, 0x00,
|
||||||
|
0x38, 0x44, 0x44, 0x44, 0x28, 0x28, 0x6c, 0x00, 0x3c, 0x20, 0x18, 0x44,
|
||||||
|
0x44, 0x44, 0x38, 0x00, 0x00, 0x00, 0x6c, 0x92, 0x92, 0x6c, 0x00, 0x00,
|
||||||
|
0x00, 0x24, 0x4a, 0x52, 0x22, 0x5c, 0x40, 0x00, 0x00, 0x00, 0x3c, 0x40,
|
||||||
|
0x38, 0x40, 0x3c, 0x00, 0x38, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x00,
|
||||||
|
0x00, 0x7c, 0x00, 0x7c, 0x00, 0x7c, 0x00, 0x00, 0x10, 0x10, 0x7c, 0x10,
|
||||||
|
0x10, 0x7c, 0x00, 0x00, 0x20, 0x10, 0x08, 0x10, 0x20, 0x00, 0x38, 0x00,
|
||||||
|
0x08, 0x10, 0x20, 0x10, 0x08, 0x00, 0x38, 0x00, 0x0c, 0x12, 0x10, 0x10,
|
||||||
|
0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x90, 0x60,
|
||||||
|
0x00, 0x10, 0x00, 0x7c, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x54, 0x08,
|
||||||
|
0x20, 0x54, 0x08, 0x00, 0x00, 0x10, 0x28, 0x10, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x1e, 0x10, 0x10, 0x10, 0x10, 0x90, 0x50, 0x20,
|
||||||
|
0x00, 0x38, 0x24, 0x24, 0x24, 0x00, 0x00, 0x00, 0x38, 0x04, 0x1c, 0x20,
|
||||||
|
0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x3c, 0x3c, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||||
|
};
|
BIN
src/rsrc/font/MSX_GRAPH_8x8.bin
Normal file
BIN
src/rsrc/font/MSX_GRAPH_8x8.bin
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue