1
0
mirror of synced 2026-03-02 18:05:39 +00:00

Major rework of IO to use MOVSW.

This commit is contained in:
Matthieu Bucchianeri
2025-02-15 16:44:10 -08:00
parent 730b632510
commit 9535b0f878
6 changed files with 273 additions and 295 deletions

View File

@@ -172,7 +172,8 @@
#define EMS_TOTAL_SIZE (16*1024*1024)
#define SD_BASE 0x280 // Must be a multiple of 16.
#define SD_BASE 0x280 // Must be a multiple of 8.
#define SD_FIXED_DISK_ID 0x80 // or 0x81 for 2nd disk.
// --------------------------------------------------------------------------------------------------
@@ -197,7 +198,7 @@ uint8_t spi_shift_out =0;
uint8_t sd_spi_datain =0;
uint32_t sd_spi_cs_n = 0x0;
uint32_t sd_spi_dataout =0;
uint8_t sd_scratch_register[5] = {0, 0, 0, 0, 0};
uint8_t sd_scratch_register[4] = {0, 0, 0, 0};
uint16_t sd_requested_timeout = 0;
elapsedMillis sd_timeout;
@@ -542,15 +543,15 @@ inline void Mem_Read_Cycle() {
GPIO8_DR = sd_pin_outputs + MUX_DATA_n_HIGH + CHRDY_OE_n_HIGH + DATA_OE_n_HIGH;
}
/*
XTMax_MEM_Response_Array
- Array holds value 0,1,2
0 = unitiailzed - add wait states and snoop
1 = No wait states and no response
2 = No wait states and yes respond
/*
XTMax_MEM_Response_Array
- Array holds value 0,1,2
0 = unitiailzed - add wait states and snoop
1 = No wait states and no response
2 = No wait states and yes respond
*/
else if (isa_address<0xA0000) { // "Conventional" RAM
*/
else if (isa_address<0xA0000) { // "Conventional" RAM
isa_data_out = Internal_RAM_Read();
GPIO7_DR = GPIO7_DATA_OUT_UNSCRAMBLE + MUX_ADDR_n_LOW + CHRDY_OUT_LOW + trigger_out;
@@ -591,6 +592,19 @@ inline void Mem_Read_Cycle() {
GPIO8_DR = sd_pin_outputs + MUX_DATA_n_HIGH + CHRDY_OE_n_HIGH + DATA_OE_n_HIGH;
}
else if (isa_address>=BOOTROM_ADDR+sizeof(BOOTROM) && isa_address<BOOTROM_ADDR+sizeof(BOOTROM)+512) { // SD Card virtual buffer
GPIO7_DR = MUX_ADDR_n_LOW + CHRDY_OUT_LOW + trigger_out;
GPIO8_DR = sd_pin_outputs + MUX_DATA_n_HIGH + CHRDY_OE_n_LOW + DATA_OE_n_LOW ; // Assert CHRDY_n=0 to begin wait states
// Alias to IO port SD_BASE
sd_spi_dataout = 0xff; SD_SPI_Cycle(); isa_data_out = sd_spi_datain;
GPIO7_DR = GPIO7_DATA_OUT_UNSCRAMBLE + MUX_ADDR_n_LOW + CHRDY_OUT_LOW + trigger_out; // Output data
GPIO8_DR = sd_pin_outputs + MUX_DATA_n_HIGH + CHRDY_OE_n_HIGH + DATA_OE_n_LOW; // De-assert CHRDY
while ( (gpio9_int&0xF0) != 0xF0 ) { gpio9_int = GPIO9_DR; } // Wait here until cycle is complete
GPIO8_DR = sd_pin_outputs + MUX_DATA_n_HIGH + CHRDY_OE_n_HIGH + DATA_OE_n_HIGH;
}
return;
}
@@ -645,6 +659,27 @@ inline void Mem_Write_Cycle() {
GPIO7_DR = GPIO7_DATA_OUT_UNSCRAMBLE + MUX_ADDR_n_LOW + CHRDY_OUT_LOW + trigger_out;
GPIO8_DR = sd_pin_outputs + MUX_DATA_n_HIGH + CHRDY_OE_n_HIGH + DATA_OE_n_HIGH;
}
else if (isa_address>=BOOTROM_ADDR+sizeof(BOOTROM) && isa_address<BOOTROM_ADDR+sizeof(BOOTROM)+512) { // SD Card virtual buffer
GPIO7_DR = GPIO7_DATA_OUT_UNSCRAMBLE + MUX_ADDR_n_HIGH + CHRDY_OUT_LOW + trigger_out;
GPIO8_DR = sd_pin_outputs + MUX_DATA_n_LOW + CHRDY_OE_n_LOW + DATA_OE_n_HIGH; // Steer data mux to Data[7:0] and Assert CHRDY_n=0 to begin wait states
delayNanoseconds(10); // Wait some time for buffers to switch from address to data
gpio6_int = GPIO6_DR;
data_in = 0xFF & ADDRESS_DATA_GPIO6_UNSCRAMBLE;
// Alias to IO port SD_BASE
sd_spi_dataout = data_in; SD_SPI_Cycle();
GPIO8_DR = sd_pin_outputs + MUX_DATA_n_LOW + CHRDY_OE_n_HIGH + DATA_OE_n_HIGH; // De-assert CHRDY
while ( (gpio9_int&0xF0) != 0xF0 ) { // Wait here until cycle is complete
gpio6_int = GPIO6_DR;
gpio9_int = GPIO9_DR;
}
GPIO7_DR = GPIO7_DATA_OUT_UNSCRAMBLE + MUX_ADDR_n_LOW + CHRDY_OUT_LOW + trigger_out;
GPIO8_DR = sd_pin_outputs + MUX_DATA_n_HIGH + CHRDY_OE_n_HIGH + DATA_OE_n_HIGH;
}
return;
}
@@ -678,18 +713,17 @@ inline void IO_Read_Cycle() {
}
else if ((isa_address&0x0FF0)==SD_BASE ) { // Location of SD Card registers
else if ((isa_address&0x0FF8)==SD_BASE ) { // Location of SD Card registers
switch (isa_address) {
case SD_BASE: // First two registers serve the same function (to allow use of Word I/O)
case SD_BASE+1: sd_spi_dataout = 0xff; SD_SPI_Cycle(); isa_data_out = sd_spi_datain; break;
case SD_BASE+2: break; // Write only
case SD_BASE+2: isa_data_out = SD_FIXED_DISK_ID; break;
case SD_BASE+3: isa_data_out = sd_scratch_register[0]; break;
case SD_BASE+4: isa_data_out = sd_scratch_register[1]; break;
case SD_BASE+5: isa_data_out = sd_scratch_register[2]; break;
case SD_BASE+6: isa_data_out = sd_scratch_register[3]; break;
case SD_BASE+7: isa_data_out = sd_scratch_register[4]; break;
case SD_BASE+15: isa_data_out = sd_timeout >= sd_requested_timeout; break;
case SD_BASE+7: isa_data_out = sd_timeout >= sd_requested_timeout; break;
default: isa_data_out = 0xff; break;
}
@@ -739,7 +773,7 @@ inline void IO_Write_Cycle() {
}
else if ((isa_address&0x0FF0)==SD_BASE ) { // Location of SD Card registers
else if ((isa_address&0x0FF8)==SD_BASE ) { // Location of SD Card registers
GPIO7_DR = GPIO7_DATA_OUT_UNSCRAMBLE + MUX_ADDR_n_HIGH + CHRDY_OUT_LOW + trigger_out;
GPIO8_DR = sd_pin_outputs + MUX_DATA_n_LOW + CHRDY_OE_n_HIGH + DATA_OE_n_HIGH;
@@ -755,8 +789,7 @@ inline void IO_Write_Cycle() {
case SD_BASE+4: sd_scratch_register[1] = data_in; break;
case SD_BASE+5: sd_scratch_register[2] = data_in; break;
case SD_BASE+6: sd_scratch_register[3] = data_in; break;
case SD_BASE+7: sd_scratch_register[4] = data_in; break;
case SD_BASE+15: sd_timeout = 0; sd_requested_timeout = data_in * 10; break;
case SD_BASE+7: sd_timeout = 0; sd_requested_timeout = data_in * 10; break;
}
//gpio9_int = GPIO9_DR;

View File

@@ -1,121 +1,111 @@
#define BOOTROM_ADDR 0xCE000
#define BOOTROM_ADDR 0xce000
unsigned char BOOTROM[] = {
85, 170, 4, 6, 80, 81, 82, 86, 250, 184, 197, 5, 232, 49, 5, 232,
54, 4, 115, 3, 233, 240, 0, 49, 192, 80, 157, 156, 88, 37, 0, 240,
61, 0, 240, 117, 26, 176, 255, 177, 33, 210, 232, 117, 18, 251, 190, 0,
0, 185, 255, 255, 243, 172, 9, 201, 250, 116, 4, 48, 210, 235, 8, 178,
1, 184, 7, 6, 232, 249, 4, 184, 131, 2, 146, 238, 184, 44, 6, 232,
238, 4, 49, 192, 142, 192, 38, 161, 78, 0, 186, 132, 2, 239, 232, 253,
4, 184, 48, 7, 232, 217, 4, 38, 161, 76, 0, 186, 134, 2, 239, 232,
236, 4, 184, 52, 7, 232, 200, 4, 184, 65, 6, 232, 194, 4, 184, 0,
206, 38, 163, 78, 0, 232, 214, 4, 184, 48, 7, 232, 178, 4, 184, 14,
1, 38, 163, 76, 0, 232, 198, 4, 184, 52, 7, 232, 162, 4, 184, 86,
6, 232, 156, 4, 184, 0, 206, 38, 163, 6, 1, 232, 176, 4, 184, 48,
7, 232, 140, 4, 184, 226, 1, 38, 163, 4, 1, 232, 160, 4, 184, 52,
7, 232, 124, 4, 184, 242, 6, 232, 118, 4, 184, 0, 206, 38, 163, 98,
0, 232, 138, 4, 184, 48, 7, 232, 102, 4, 184, 186, 3, 38, 163, 96,
0, 232, 122, 4, 184, 52, 7, 232, 86, 4, 184, 186, 6, 232, 80, 4,
184, 64, 0, 142, 192, 38, 254, 6, 117, 0, 38, 160, 117, 0, 232, 93,
4, 184, 52, 7, 232, 57, 4, 251, 94, 90, 89, 88, 7, 203, 251, 85,
86, 128, 250, 128, 116, 57, 137, 197, 137, 214, 156, 14, 184, 48, 1, 80,
156, 186, 132, 2, 237, 80, 186, 134, 2, 237, 80, 137, 232, 137, 242, 207,
156, 80, 137, 240, 60, 128, 114, 19, 137, 232, 128, 252, 8, 117, 12, 6,
184, 64, 0, 142, 192, 38, 138, 22, 117, 0, 7, 88, 157, 235, 58, 128,
252, 21, 126, 5, 232, 113, 0, 235, 34, 128, 252, 1, 116, 10, 128, 252,
21, 116, 5, 190, 123, 1, 235, 3, 190, 137, 1, 86, 137, 222, 136, 227,
48, 255, 208, 227, 135, 222, 46, 255, 164, 156, 1, 140, 197, 190, 64, 0,
142, 198, 38, 136, 38, 116, 0, 142, 197, 137, 229, 139, 118, 8, 86, 115,
4, 157, 249, 235, 2, 157, 248, 94, 93, 202, 2, 0, 159, 3, 242, 1,
6, 2, 157, 2, 96, 3, 200, 1, 200, 1, 200, 1, 123, 3, 159, 3,
200, 1, 200, 1, 145, 3, 159, 3, 200, 1, 200, 1, 159, 3, 159, 3,
200, 1, 200, 1, 159, 3, 161, 3, 80, 184, 213, 6, 232, 113, 3, 88,
80, 136, 224, 48, 228, 232, 134, 3, 184, 52, 7, 232, 98, 3, 88, 233,
204, 1, 0, 4, 255, 0, 0, 255, 255, 0, 200, 0, 0, 0, 0, 0,
63, 0, 6, 189, 64, 0, 142, 197, 48, 228, 38, 134, 38, 116, 0, 132,
228, 116, 1, 249, 7, 195, 132, 192, 117, 3, 233, 161, 1, 80, 48, 228,
137, 198, 83, 232, 225, 1, 137, 197, 1, 240, 137, 222, 131, 211, 0, 232,
8, 2, 91, 88, 115, 3, 233, 137, 1, 83, 81, 82, 87, 80, 137, 193,
48, 237, 137, 223, 186, 130, 2, 176, 0, 238, 81, 137, 232, 137, 243, 177,
81, 232, 217, 2, 114, 70, 186, 143, 2, 176, 10, 238, 186, 128, 2, 236,
60, 254, 116, 10, 186, 143, 2, 236, 132, 192, 117, 48, 235, 238, 185, 0,
1, 82, 186, 131, 2, 236, 90, 132, 192, 252, 116, 4, 243, 109, 235, 4,
237, 171, 226, 252, 237, 131, 197, 1, 131, 214, 0, 89, 226, 188, 186, 130,
2, 176, 1, 238, 88, 95, 90, 89, 91, 233, 42, 1, 186, 130, 2, 176,
1, 238, 89, 88, 40, 200, 95, 90, 89, 91, 233, 13, 1, 132, 192, 117,
3, 233, 10, 1, 80, 48, 228, 137, 198, 83, 232, 74, 1, 137, 197, 1,
240, 137, 222, 131, 211, 0, 232, 113, 1, 91, 88, 115, 3, 233, 242, 0,
30, 83, 81, 82, 87, 80, 137, 193, 48, 237, 137, 223, 140, 192, 142, 216,
186, 130, 2, 176, 0, 238, 81, 137, 232, 137, 243, 177, 88, 232, 61, 2,
114, 109, 186, 128, 2, 176, 254, 238, 185, 0, 1, 135, 247, 82, 186, 131,
2, 236, 90, 132, 192, 252, 116, 4, 243, 111, 235, 4, 173, 239, 226, 252,
135, 254, 186, 143, 2, 176, 25, 238, 186, 128, 2, 236, 60, 255, 117, 10,
186, 143, 2, 236, 132, 192, 117, 55, 235, 238, 36, 31, 60, 5, 117, 47,
186, 143, 2, 176, 25, 238, 186, 128, 2, 236, 132, 192, 117, 10, 186, 143,
2, 236, 132, 192, 117, 25, 235, 238, 131, 197, 1, 131, 214, 0, 89, 226,
149, 186, 130, 2, 176, 1, 238, 88, 95, 90, 89, 91, 31, 235, 103, 186,
130, 2, 176, 1, 238, 89, 88, 40, 200, 95, 90, 89, 91, 31, 235, 74,
132, 192, 116, 74, 80, 48, 228, 137, 197, 83, 232, 138, 0, 1, 232, 131,
211, 0, 232, 181, 0, 91, 88, 114, 57, 235, 59, 182, 254, 6, 184, 64,
0, 142, 192, 38, 138, 22, 117, 0, 7, 181, 254, 177, 255, 49, 192, 248,
195, 80, 83, 232, 97, 0, 232, 145, 0, 91, 88, 114, 21, 235, 23, 235,
21, 180, 3, 232, 155, 0, 135, 209, 248, 195, 180, 170, 249, 195, 180, 1,
249, 195, 180, 4, 249, 195, 48, 228, 248, 195, 49, 192, 142, 216, 142, 192,
185, 0, 1, 191, 0, 124, 243, 171, 184, 1, 2, 186, 128, 0, 185, 1,
0, 187, 0, 124, 205, 19, 129, 62, 254, 125, 85, 170, 117, 15, 184, 7,
7, 232, 92, 1, 49, 192, 142, 192, 234, 0, 124, 0, 0, 184, 33, 7,
232, 77, 1, 251, 244, 235, 253, 49, 192, 49, 219, 82, 81, 82, 136, 200,
36, 192, 209, 224, 209, 224, 136, 232, 185, 255, 0, 247, 225, 90, 136, 241,
48, 237, 1, 200, 177, 63, 247, 225, 89, 81, 48, 237, 128, 225, 63, 73,
1, 200, 131, 210, 0, 137, 211, 89, 90, 195, 81, 82, 232, 18, 0, 57,
211, 114, 10, 119, 4, 57, 200, 114, 4, 249, 90, 89, 195, 248, 90, 89,
195, 186, 250, 0, 185, 63, 197, 195, 80, 30, 83, 81, 82, 86, 184, 0,
206, 142, 216, 186, 130, 2, 176, 1, 238, 185, 1, 0, 186, 160, 134, 180,
134, 205, 21, 186, 128, 2, 176, 255, 185, 10, 0, 238, 226, 253, 186, 130,
2, 176, 0, 238, 187, 10, 0, 190, 5, 5, 185, 1, 0, 180, 1, 232,
92, 0, 115, 15, 49, 201, 186, 32, 78, 180, 134, 205, 21, 75, 117, 231,
249, 235, 52, 190, 11, 5, 185, 5, 0, 180, 1, 232, 64, 0, 114, 39,
186, 143, 2, 176, 250, 238, 190, 17, 5, 185, 1, 0, 180, 1, 232, 45,
0, 190, 23, 5, 185, 1, 0, 180, 0, 232, 34, 0, 115, 9, 186, 143,
2, 236, 132, 192, 116, 224, 249, 94, 90, 89, 91, 31, 114, 8, 184, 120,
6, 232, 108, 0, 88, 195, 184, 155, 6, 232, 100, 0, 88, 195, 186, 128,
2, 176, 255, 238, 81, 185, 6, 0, 252, 172, 238, 226, 252, 185, 8, 0,
236, 60, 255, 225, 251, 89, 56, 224, 118, 3, 249, 235, 4, 248, 236, 226,
253, 176, 255, 238, 195, 64, 0, 0, 0, 0, 149, 72, 0, 0, 1, 170,
135, 119, 0, 0, 0, 0, 1, 105, 64, 0, 0, 0, 1, 186, 128, 2,
80, 176, 255, 238, 136, 200, 136, 252, 239, 88, 134, 216, 239, 134, 216, 180,
1, 239, 185, 8, 0, 236, 60, 255, 225, 251, 132, 192, 116, 1, 249, 195,
156, 30, 83, 86, 137, 198, 184, 0, 206, 142, 216, 180, 14, 49, 219, 252,
172, 8, 192, 116, 4, 205, 16, 235, 247, 94, 91, 31, 157, 195, 156, 30,
83, 81, 82, 86, 137, 194, 184, 0, 206, 142, 216, 49, 219, 252, 137, 214,
177, 12, 211, 238, 131, 230, 15, 138, 132, 181, 5, 180, 14, 205, 16, 137,
214, 177, 8, 211, 238, 131, 230, 15, 138, 132, 181, 5, 180, 14, 205, 16,
137, 214, 177, 4, 211, 238, 131, 230, 15, 138, 132, 181, 5, 180, 14, 205,
16, 137, 214, 131, 230, 15, 138, 132, 181, 5, 180, 14, 205, 16, 94, 90,
89, 91, 31, 157, 195, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 65,
66, 67, 68, 69, 70, 66, 111, 111, 116, 82, 79, 77, 32, 102, 111, 114,
32, 88, 84, 77, 97, 120, 32, 118, 49, 46, 48, 13, 10, 67, 111, 112,
121, 114, 105, 103, 104, 116, 32, 40, 99, 41, 32, 50, 48, 50, 53, 32,
77, 97, 116, 116, 104, 105, 101, 117, 32, 66, 117, 99, 99, 104, 105, 97,
110, 101, 114, 105, 13, 10, 0, 67, 80, 85, 32, 115, 117, 112, 112, 111,
114, 116, 115, 32, 73, 78, 83, 47, 79, 85, 84, 83, 32, 105, 110, 115,
116, 114, 117, 99, 116, 105, 111, 110, 115, 13, 10, 0, 79, 108, 100, 32,
73, 78, 84, 49, 51, 104, 32, 86, 101, 99, 116, 111, 114, 32, 61, 32,
0, 78, 101, 119, 32, 73, 78, 84, 49, 51, 104, 32, 86, 101, 99, 116,
111, 114, 32, 61, 32, 0, 78, 101, 119, 32, 70, 105, 120, 101, 100, 32,
68, 105, 115, 107, 32, 80, 97, 114, 97, 109, 101, 116, 101, 114, 32, 84,
97, 98, 108, 101, 32, 61, 32, 0, 83, 68, 32, 67, 97, 114, 100, 32,
105, 110, 105, 116, 105, 97, 108, 105, 122, 101, 100, 32, 115, 117, 99, 99,
101, 115, 115, 102, 117, 108, 108, 121, 13, 10, 0, 83, 68, 32, 67, 97,
114, 100, 32, 102, 97, 105, 108, 101, 100, 32, 116, 111, 32, 105, 110, 105,
116, 105, 97, 108, 105, 122, 101, 13, 10, 0, 84, 111, 116, 97, 108, 32,
70, 105, 120, 101, 100, 32, 68, 105, 115, 107, 32, 68, 114, 105, 118, 101,
115, 32, 61, 32, 0, 85, 110, 115, 117, 112, 112, 111, 114, 116, 101, 100,
32, 73, 78, 84, 49, 51, 104, 32, 70, 117, 110, 99, 116, 105, 111, 110,
32, 0, 78, 101, 119, 32, 73, 78, 84, 49, 56, 104, 32, 86, 101, 99,
116, 111, 114, 32, 61, 32, 0, 66, 111, 111, 116, 105, 110, 103, 32, 102,
114, 111, 109, 32, 83, 68, 32, 67, 97, 114, 100, 46, 46, 46, 13, 10,
0, 78, 111, 116, 32, 98, 111, 111, 116, 97, 98, 108, 101, 13, 10, 0,
58, 0, 32, 0, 13, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
85, 170, 4, 6, 80, 81, 82, 86, 250, 184, 124, 5, 232, 232, 4, 232,
237, 3, 115, 3, 233, 158, 0, 184, 190, 5, 232, 218, 4, 49, 192, 142,
192, 38, 161, 78, 0, 186, 131, 2, 239, 232, 233, 4, 184, 151, 6, 232,
197, 4, 38, 161, 76, 0, 186, 133, 2, 239, 232, 216, 4, 184, 155, 6,
232, 180, 4, 184, 0, 206, 38, 163, 78, 0, 184, 188, 0, 38, 163, 76,
0, 184, 27, 6, 232, 160, 4, 186, 130, 2, 236, 48, 228, 80, 232, 180,
4, 184, 155, 6, 232, 144, 4, 88, 60, 128, 117, 16, 184, 0, 206, 38,
163, 6, 1, 184, 151, 1, 38, 163, 4, 1, 235, 14, 184, 0, 206, 38,
163, 26, 1, 184, 151, 1, 38, 163, 24, 1, 184, 0, 206, 38, 163, 98,
0, 184, 110, 3, 38, 163, 96, 0, 184, 54, 6, 232, 89, 4, 184, 64,
0, 142, 192, 38, 254, 6, 117, 0, 38, 160, 117, 0, 232, 102, 4, 184,
155, 6, 232, 66, 4, 251, 94, 90, 89, 88, 7, 203, 251, 85, 86, 80,
82, 186, 130, 2, 236, 90, 56, 194, 88, 116, 57, 137, 197, 137, 214, 156,
14, 184, 229, 0, 80, 156, 186, 131, 2, 237, 80, 186, 133, 2, 237, 80,
137, 232, 137, 242, 207, 156, 80, 137, 240, 60, 128, 114, 19, 137, 232, 128,
252, 8, 117, 12, 6, 184, 64, 0, 142, 192, 38, 138, 22, 117, 0, 7,
88, 157, 235, 58, 128, 252, 21, 126, 5, 232, 113, 0, 235, 34, 128, 252,
1, 116, 10, 128, 252, 21, 116, 5, 190, 48, 1, 235, 3, 190, 62, 1,
86, 137, 222, 136, 227, 48, 255, 208, 227, 135, 222, 46, 255, 164, 81, 1,
140, 197, 190, 64, 0, 142, 198, 38, 136, 38, 116, 0, 142, 197, 137, 229,
139, 118, 8, 86, 115, 4, 157, 249, 235, 2, 157, 248, 94, 93, 202, 2,
0, 83, 3, 167, 1, 187, 1, 79, 2, 20, 3, 125, 1, 125, 1, 125,
1, 47, 3, 83, 3, 125, 1, 125, 1, 69, 3, 83, 3, 125, 1, 125,
1, 83, 3, 83, 3, 125, 1, 125, 1, 83, 3, 85, 3, 80, 184, 81,
6, 232, 115, 3, 88, 80, 136, 224, 48, 228, 232, 136, 3, 184, 155, 6,
232, 100, 3, 88, 233, 203, 1, 0, 4, 255, 0, 0, 255, 255, 0, 200,
0, 0, 0, 0, 0, 63, 0, 6, 189, 64, 0, 142, 197, 48, 228, 38,
134, 38, 116, 0, 132, 228, 116, 1, 249, 7, 195, 132, 192, 117, 3, 233,
160, 1, 80, 48, 228, 137, 198, 83, 232, 227, 1, 137, 197, 1, 240, 137,
222, 131, 211, 0, 232, 10, 2, 91, 88, 115, 3, 233, 136, 1, 30, 83,
81, 82, 87, 80, 137, 193, 48, 237, 184, 0, 206, 142, 216, 137, 223, 186,
130, 2, 176, 0, 238, 81, 137, 232, 137, 243, 177, 81, 232, 213, 2, 114,
60, 186, 135, 2, 176, 10, 238, 186, 128, 2, 236, 60, 254, 116, 10, 186,
135, 2, 236, 132, 192, 117, 38, 235, 238, 185, 0, 1, 86, 190, 0, 8,
252, 243, 165, 94, 237, 131, 197, 1, 131, 214, 0, 89, 226, 199, 186, 130,
2, 176, 1, 238, 88, 95, 90, 89, 91, 31, 233, 45, 1, 186, 130, 2,
176, 1, 238, 89, 88, 40, 200, 95, 90, 89, 91, 31, 233, 15, 1, 132,
192, 117, 3, 233, 12, 1, 80, 48, 228, 137, 198, 83, 232, 79, 1, 137,
197, 1, 240, 137, 222, 131, 211, 0, 232, 118, 1, 91, 88, 115, 3, 233,
244, 0, 30, 83, 81, 82, 87, 80, 137, 193, 48, 237, 137, 223, 140, 192,
142, 216, 184, 0, 206, 142, 192, 186, 130, 2, 176, 0, 238, 81, 137, 232,
137, 243, 177, 88, 232, 61, 2, 114, 102, 186, 128, 2, 176, 254, 238, 185,
0, 1, 86, 137, 254, 191, 0, 8, 252, 243, 165, 137, 247, 94, 186, 135,
2, 176, 25, 238, 186, 128, 2, 236, 60, 255, 117, 10, 186, 135, 2, 236,
132, 192, 117, 59, 235, 238, 36, 31, 60, 5, 117, 51, 186, 135, 2, 176,
25, 238, 186, 128, 2, 236, 132, 192, 117, 10, 186, 135, 2, 236, 132, 192,
117, 29, 235, 238, 131, 197, 1, 131, 214, 0, 89, 226, 160, 186, 130, 2,
176, 1, 238, 140, 216, 142, 192, 88, 95, 90, 89, 91, 31, 235, 107, 186,
130, 2, 176, 1, 238, 89, 140, 216, 142, 192, 88, 40, 200, 95, 90, 89,
91, 31, 235, 74, 132, 192, 116, 74, 80, 48, 228, 137, 197, 83, 232, 141,
0, 1, 232, 131, 211, 0, 232, 184, 0, 91, 88, 114, 57, 235, 59, 182,
254, 6, 184, 64, 0, 142, 192, 38, 138, 22, 117, 0, 7, 181, 254, 177,
255, 49, 192, 248, 195, 80, 83, 232, 100, 0, 232, 148, 0, 91, 88, 114,
21, 235, 23, 235, 21, 180, 3, 232, 158, 0, 135, 209, 248, 195, 180, 170,
249, 195, 180, 1, 249, 195, 180, 4, 249, 195, 48, 228, 248, 195, 49, 192,
142, 216, 142, 192, 185, 0, 1, 191, 0, 124, 243, 171, 186, 130, 2, 236,
136, 194, 184, 1, 2, 185, 1, 0, 187, 0, 124, 205, 19, 129, 62, 254,
125, 85, 170, 117, 15, 184, 110, 6, 232, 92, 1, 49, 192, 142, 192, 234,
0, 124, 0, 0, 184, 136, 6, 232, 77, 1, 251, 244, 235, 253, 49, 192,
49, 219, 82, 81, 82, 136, 200, 36, 192, 209, 224, 209, 224, 136, 232, 185,
255, 0, 247, 225, 90, 136, 241, 48, 237, 1, 200, 177, 63, 247, 225, 89,
81, 48, 237, 128, 225, 63, 73, 1, 200, 131, 210, 0, 137, 211, 89, 90,
195, 81, 82, 232, 18, 0, 57, 211, 114, 10, 119, 4, 57, 200, 114, 4,
249, 90, 89, 195, 248, 90, 89, 195, 186, 250, 0, 185, 63, 197, 195, 80,
30, 83, 81, 82, 86, 184, 0, 206, 142, 216, 186, 130, 2, 176, 1, 238,
185, 1, 0, 186, 160, 134, 180, 134, 205, 21, 186, 128, 2, 176, 255, 185,
10, 0, 238, 226, 253, 186, 130, 2, 176, 0, 238, 187, 10, 0, 190, 188,
4, 185, 1, 0, 180, 1, 232, 92, 0, 115, 15, 49, 201, 186, 32, 78,
180, 134, 205, 21, 75, 117, 231, 249, 235, 52, 190, 194, 4, 185, 5, 0,
180, 1, 232, 64, 0, 114, 39, 186, 135, 2, 176, 250, 238, 190, 200, 4,
185, 1, 0, 180, 1, 232, 45, 0, 190, 206, 4, 185, 1, 0, 180, 0,
232, 34, 0, 115, 9, 186, 135, 2, 236, 132, 192, 116, 224, 249, 94, 90,
89, 91, 31, 114, 8, 184, 217, 5, 232, 108, 0, 88, 195, 184, 252, 5,
232, 100, 0, 88, 195, 186, 128, 2, 176, 255, 238, 81, 185, 6, 0, 252,
172, 238, 226, 252, 185, 8, 0, 236, 60, 255, 225, 251, 89, 56, 224, 118,
3, 249, 235, 4, 248, 236, 226, 253, 176, 255, 238, 195, 64, 0, 0, 0,
0, 149, 72, 0, 0, 1, 170, 135, 119, 0, 0, 0, 0, 1, 105, 64,
0, 0, 0, 1, 186, 128, 2, 80, 176, 255, 238, 136, 200, 136, 252, 239,
88, 134, 216, 239, 134, 216, 180, 1, 239, 185, 8, 0, 236, 60, 255, 225,
251, 132, 192, 116, 1, 249, 195, 156, 30, 83, 86, 137, 198, 184, 0, 206,
142, 216, 180, 14, 49, 219, 252, 172, 8, 192, 116, 4, 205, 16, 235, 247,
94, 91, 31, 157, 195, 156, 30, 83, 81, 82, 86, 137, 194, 184, 0, 206,
142, 216, 49, 219, 252, 137, 214, 177, 12, 211, 238, 131, 230, 15, 138, 132,
108, 5, 180, 14, 205, 16, 137, 214, 177, 8, 211, 238, 131, 230, 15, 138,
132, 108, 5, 180, 14, 205, 16, 137, 214, 177, 4, 211, 238, 131, 230, 15,
138, 132, 108, 5, 180, 14, 205, 16, 137, 214, 131, 230, 15, 138, 132, 108,
5, 180, 14, 205, 16, 94, 90, 89, 91, 31, 157, 195, 48, 49, 50, 51,
52, 53, 54, 55, 56, 57, 65, 66, 67, 68, 69, 70, 66, 111, 111, 116,
82, 79, 77, 32, 102, 111, 114, 32, 88, 84, 77, 97, 120, 32, 118, 49,
46, 48, 13, 10, 67, 111, 112, 121, 114, 105, 103, 104, 116, 32, 40, 99,
41, 32, 50, 48, 50, 53, 32, 77, 97, 116, 116, 104, 105, 101, 117, 32,
66, 117, 99, 99, 104, 105, 97, 110, 101, 114, 105, 13, 10, 0, 79, 108,
100, 32, 73, 78, 84, 49, 51, 104, 32, 86, 101, 99, 116, 111, 114, 32,
32, 32, 32, 32, 32, 32, 61, 32, 0, 83, 68, 32, 67, 97, 114, 100,
32, 105, 110, 105, 116, 105, 97, 108, 105, 122, 101, 100, 32, 115, 117, 99,
99, 101, 115, 115, 102, 117, 108, 108, 121, 13, 10, 0, 83, 68, 32, 67,
97, 114, 100, 32, 102, 97, 105, 108, 101, 100, 32, 116, 111, 32, 105, 110,
105, 116, 105, 97, 108, 105, 122, 101, 13, 10, 0, 70, 105, 120, 101, 100,
32, 68, 105, 115, 107, 32, 73, 68, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 61, 32, 0, 84, 111, 116, 97, 108, 32, 70, 105, 120, 101,
100, 32, 68, 105, 115, 107, 32, 68, 114, 105, 118, 101, 115, 32, 61, 32,
0, 85, 110, 115, 117, 112, 112, 111, 114, 116, 101, 100, 32, 73, 78, 84,
49, 51, 104, 32, 70, 117, 110, 99, 116, 105, 111, 110, 32, 0, 66, 111,
111, 116, 105, 110, 103, 32, 102, 114, 111, 109, 32, 83, 68, 32, 67, 97,
114, 100, 46, 46, 46, 13, 10, 0, 78, 111, 116, 32, 98, 111, 111, 116,
97, 98, 108, 101, 13, 10, 0, 58, 0, 32, 0, 13, 10, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -127,4 +117,14 @@ unsigned char BOOTROM[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173};
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35};