summaryrefslogtreecommitdiffstats
path: root/de1/fpga-bbc-pq/master/saa5050-rom.patch
diff options
context:
space:
mode:
Diffstat (limited to 'de1/fpga-bbc-pq/master/saa5050-rom.patch')
-rw-r--r--de1/fpga-bbc-pq/master/saa5050-rom.patch472
1 files changed, 472 insertions, 0 deletions
diff --git a/de1/fpga-bbc-pq/master/saa5050-rom.patch b/de1/fpga-bbc-pq/master/saa5050-rom.patch
new file mode 100644
index 0000000..b676e51
--- /dev/null
+++ b/de1/fpga-bbc-pq/master/saa5050-rom.patch
@@ -0,0 +1,472 @@
+diff --git a/roms/saa5050/genrom.c b/roms/saa5050/genrom.c
+new file mode 100644
+index 0000000..9d93bb3
+--- /dev/null
++++ b/roms/saa5050/genrom.c
+@@ -0,0 +1,180 @@
++#include <stdint.h>
++#include <stdio.h>
++#include <string.h>
++#include <stdlib.h>
++
++// Characters on a 5x9 matrix. This is padded up to 16 rows when the
++// ROM is generated
++static uint8_t saa5050_charset[] = {
++ 0,0,0,0,0,0,0,0,0,
++ 4,4,4,4,4,0,4,0,0,
++ 10,10,10,0,0,0,0,0,0,
++ 6,9,8,28,8,8,31,0,0,
++ 14,21,20,14,5,21,14,0,0,
++ 24,25,2,4,8,19,3,0,0,
++ 8,20,20,8,21,18,13,0,0,
++ 4,4,4,0,0,0,0,0,0,
++
++ 2,4,8,8,8,4,2,0,0,
++ 8,4,2,2,2,4,8,0,0,
++ 4,21,14,4,14,21,4,0,0,
++ 0,4,4,31,4,4,0,0,0,
++ 0,0,0,0,0,4,4,8,0,
++ 0,0,0,14,0,0,0,0,0,
++ 0,0,0,0,0,0,4,0,0,
++ 0,1,2,4,8,16,0,0,0,
++
++ 4,10,17,17,17,10,4,0,0,
++ 4,12,4,4,4,4,14,0,0,
++ 14,17,1,6,8,16,31,0,0,
++ 31,1,2,6,1,17,14,0,0,
++ 2,6,10,18,31,2,2,0,0,
++ 31,16,30,1,1,17,14,0,0,
++ 6,8,16,30,17,17,14,0,0,
++ 31,1,2,4,8,8,8,0,0,
++
++ 14,17,17,14,17,17,14,0,0,
++ 14,17,17,15,1,2,12,0,0,
++ 0,0,4,0,0,0,4,0,0,
++ 0,0,4,0,0,4,4,8,0,
++ 2,4,8,16,8,4,2,0,0,
++ 0,0,31,0,31,0,0,0,0,
++ 8,4,2,1,2,4,8,0,0,
++ 14,17,2,4,4,0,4,0,0,
++
++ 14,17,23,21,23,16,14,0,0,
++ 4,10,17,17,31,17,17,0,0,
++ 30,17,17,30,17,17,30,0,0,
++ 14,17,16,16,16,17,14,0,0,
++ 30,17,17,17,17,17,30,0,0,
++ 31,16,16,30,16,16,31,0,0,
++ 31,16,16,30,16,16,16,0,0,
++ 14,17,16,16,19,17,15,0,0,
++
++ 17,17,17,31,17,17,17,0,0,
++ 14,4,4,4,4,4,14,0,0,
++ 1,1,1,1,1,17,14,0,0,
++ 17,18,20,24,20,18,17,0,0,
++ 16,16,16,16,16,16,31,0,0,
++ 17,27,21,21,17,17,17,0,0,
++ 17,17,25,21,19,17,17,0,0,
++ 14,17,17,17,17,17,14,0,0,
++
++ 30,17,17,30,16,16,16,0,0,
++ 14,17,17,17,21,18,13,0,0,
++ 30,17,17,30,20,18,17,0,0,
++ 14,17,16,14,1,17,14,0,0,
++ 31,4,4,4,4,4,4,0,0,
++ 17,17,17,17,17,17,14,0,0,
++ 17,17,17,10,10,4,4,0,0,
++ 17,17,17,21,21,21,10,0,0,
++
++ 17,17,10,4,10,17,17,0,0,
++ 17,17,10,4,4,4,4,0,0,
++ 31,1,2,4,8,16,31,0,0,
++ 0,4,8,31,8,4,0,0,0,
++ 16,16,16,16,22,1,2,4,7,
++ 0,4,2,31,2,4,0,0,0,
++ 0,4,14,21,4,4,0,0,0,
++ 10,10,31,10,31,10,10,0,0,
++
++ 0,0,0,31,0,0,0,0,0,
++ 0,0,14,1,15,17,15,0,0,
++ 16,16,30,17,17,17,30,0,0,
++ 0,0,15,16,16,16,15,0,0,
++ 1,1,15,17,17,17,15,0,0,
++ 0,0,14,17,31,16,14,0,0,
++ 2,4,4,14,4,4,4,0,0,
++ 0,0,15,17,17,17,15,1,14,
++
++ 16,16,30,17,17,17,17,0,0,
++ 4,0,12,4,4,4,14,0,0,
++ 4,0,4,4,4,4,4,4,8,
++ 8,8,9,10,12,10,9,0,0,
++ 12,4,4,4,4,4,14,0,0,
++ 0,0,26,21,21,21,21,0,0,
++ 0,0,30,17,17,17,17,0,0,
++ 0,0,14,17,17,17,14,0,0,
++
++ 0,0,30,17,17,17,30,16,16,
++ 0,0,15,17,17,17,15,1,1,
++ 0,0,11,12,8,8,8,0,0,
++ 0,0,15,16,14,1,30,0,0,
++ 4,4,14,4,4,4,2,0,0,
++ 0,0,17,17,17,17,15,0,0,
++ 0,0,17,17,10,10,4,0,0,
++ 0,0,17,17,21,21,10,0,0,
++
++ 0,0,17,10,4,10,17,0,0,
++ 0,0,17,17,17,17,15,1,14,
++ 0,0,31,2,4,8,31,0,0,
++ 8,8,8,8,9,3,5,7,1,
++ 10,10,10,10,10,10,10,0,0,
++ 24,4,24,4,25,3,5,7,1,
++ 0,4,0,31,0,4,0,0,0,
++ 31,31,31,31,31,31,31,0,0,
++};
++
++/* Generates 6x10 teletext graphics symbol according to specified code */
++void gen_gfx(char code,char *base)
++{
++ char *c;
++ int r;
++
++ for (r = 0, c = base; r < 10; r++, c++) {
++ /* Set unused bit 7 to 1 to flag these characters as graphics (the
++ * implementation uses this to determine whether hold and separated
++ * modes should be applied */
++ *c = 128;
++ if (r < 3) {
++ // 1 2
++ if (code & 1) *c += 56;
++ if (code & 2) *c += 7;
++ } else if (r < 7) {
++ // 4 8
++ if (code & 4) *c += 56;
++ if (code & 8) *c += 7;
++ } else {
++ // 16 64
++ if (code & 16) *c += 56;
++ if (code & 64) *c += 7;
++ }
++ }
++}
++
++int main(void) {
++ char *outbuf;
++ int ch,row;
++
++ outbuf = malloc(256 * 16);
++ if (outbuf == NULL) {
++ fprintf(stderr,"Out of memory\n");
++ return 1;
++ }
++
++ /* Unused locations are blank (all zero) */
++ memset(outbuf,0,256 * 16);
++
++ /* Copy character bitmaps to locations 32-127 and 160-255 */
++ for (ch = 0; ch < 96; ch++) {
++ for (row = 0; row < 9; row++) {
++ outbuf[16 * (32 + ch) + row + 1] = saa5050_charset[9 * ch + row];
++ outbuf[16 * (160 + ch) + row + 1] = saa5050_charset[9 * ch + row];
++ }
++ }
++
++ /* Generate graphics in locations 160-191 and 224-255 */
++ for (ch = 160; ch < 192; ch++) {
++ gen_gfx(ch,&outbuf[16 * ch]);
++ }
++ for (ch = 224; ch < 256; ch++) {
++ gen_gfx(ch,&outbuf[16 * ch]);
++ }
++
++ /* Write to stdout */
++ fwrite(outbuf,256 * 16,1,stdout);
++
++ free(outbuf);
++ return 0;
++}
++
+diff --git a/roms/saa5050/saa5050.hex b/roms/saa5050/saa5050.hex
+new file mode 100644
+index 0000000..f696b00
+--- /dev/null
++++ b/roms/saa5050/saa5050.hex
+@@ -0,0 +1,257 @@
++:1000000000000000000000000000000000000000F0
++:1000100000000000000000000000000000000000E0
++:1000200000000000000000000000000000000000D0
++:1000300000000000000000000000000000000000C0
++:1000400000000000000000000000000000000000B0
++:1000500000000000000000000000000000000000A0
++:100060000000000000000000000000000000000090
++:100070000000000000000000000000000000000080
++:100080000000000000000000000000000000000070
++:100090000000000000000000000000000000000060
++:1000A0000000000000000000000000000000000050
++:1000B0000000000000000000000000000000000040
++:1000C0000000000000000000000000000000000030
++:1000D0000000000000000000000000000000000020
++:1000E0000000000000000000000000000000000010
++:1000F0000000000000000000000000000000000000
++:1001000000000000000000000000000000000000EF
++:1001100000000000000000000000000000000000DF
++:1001200000000000000000000000000000000000CF
++:1001300000000000000000000000000000000000BF
++:1001400000000000000000000000000000000000AF
++:10015000000000000000000000000000000000009F
++:10016000000000000000000000000000000000008F
++:10017000000000000000000000000000000000007F
++:10018000000000000000000000000000000000006F
++:10019000000000000000000000000000000000005F
++:1001A000000000000000000000000000000000004F
++:1001B000000000000000000000000000000000003F
++:1001C000000000000000000000000000000000002F
++:1001D000000000000000000000000000000000001F
++:1001E000000000000000000000000000000000000F
++:1001F00000000000000000000000000000000000FF
++:1002000000000000000000000000000000000000EE
++:1002100000040404040400040000000000000000C6
++:10022000000A0A0A000000000000000000000000B0
++:10023000000609081C08081F00000000000000005C
++:10024000000E15140E05150E000000000000000041
++:100250000018190204081303000000000000000049
++:10026000000814140815120D000000000000000022
++:100270000004040400000000000000000000000072
++:10028000000204080808040200000000000000004A
++:100290000008040202020408000000000000000040
++:1002A0000004150E040E15040000000000000000FC
++:1002B000000004041F04040000000000000000000F
++:1002C000000000000000040408000000000000001E
++:1002D000000000000E000000000000000000000010
++:1002E000000000000000000400000000000000000A
++:1002F00000000102040810000000000000000000DF
++:1003000000040A1111110A0400000000000000009E
++:1003100000040C040404040E0000000000000000AF
++:10032000000E11010608101F000000000000000070
++:10033000001F01020601110E000000000000000075
++:100340000002060A121F0202000000000000000066
++:10035000001F101E0101110E00000000000000002F
++:10036000000608101E11110E000000000000000021
++:10037000001F01020408080800000000000000003F
++:10038000000E11110E11110E0000000000000000FF
++:10039000000E11110F01020C00000000000000000F
++:1003A0000000000400000004000000000000000045
++:1003B0000000000400000404080000000000000029
++:1003C0000002040810080402000000000000000001
++:1003D0000000001F001F00000000000000000000DF
++:1003E00000080402010204080000000000000000F0
++:1003F000000E1102040400040000000000000000D0
++:10040000000E11171517100E00000000000000006C
++:1004100000040A11111F111100000000000000006B
++:10042000001E11111E11111E00000000000000002E
++:10043000000E11101010110E00000000000000004E
++:10044000001E11111111111E00000000000000001B
++:10045000001F10101E10101F000000000000000000
++:10046000001F10101E1010100000000000000000FF
++:10047000000E11101013110F00000000000000000A
++:10048000001111111F1111110000000000000000E7
++:10049000000E04040404040E00000000000000002C
++:1004A000000101010101110E000000000000000028
++:1004B00000111214181412110000000000000000B6
++:1004C000001010101010101F0000000000000000AD
++:1004D00000111B1515111111000000000000000093
++:1004E0000011111915131111000000000000000087
++:1004F000000E11111111110E00000000000000008B
++:10050000001E11111E10101000000000000000005D
++:10051000000E11111115120D000000000000000066
++:10052000001E11111E141211000000000000000036
++:10053000000E11100E01110E00000000000000005E
++:10054000001F040404040404000000000000000074
++:10055000001111111111110E000000000000000027
++:10056000001111110A0A040400000000000000003C
++:10057000001111111515150A0000000000000000FF
++:100580000011110A040A111100000000000000000F
++:100590000011110A0404040400000000000000001F
++:1005A000001F01020408101F0000000000000000EE
++:1005B000000004081F080400000000000000000004
++:1005C00000101010101601020407000000000000C7
++:1005D000000004021F0204000000000000000000F0
++:1005E0000000040E150404000000000000000000DC
++:1005F000000A0A1F0A1F0A0A00000000000000008B
++:10060000000000001F0000000000000000000000CB
++:100610000000000E010F110F00000000000000009C
++:100620000010101E1111111E00000000000000003B
++:100630000000000F1010100F00000000000000006C
++:100640000001010F1111110F000000000000000057
++:100650000000000E111F100E00000000000000003E
++:10066000000204040E040404000000000000000066
++:100670000000000F1111110F010E0000000000001A
++:100680000010101E111111110000000000000000E8
++:100690000004000C0404040E000000000000000030
++:1006A0000004000404040404040800000000000026
++:1006B000000808090A0C0A090000000000000000F8
++:1006C000000C04040404040E0000000000000000FC
++:1006D0000000001A151515150000000000000000AC
++:1006E0000000001E111111110000000000000000A8
++:1006F0000000000E1111110E0000000000000000AB
++:100700000000001E1111111E10100000000000005A
++:100710000000000F1111110F010100000000000086
++:100720000000000B0C08080800000000000000009A
++:100730000000000F100E011E00000000000000006D
++:100740000004040E04040402000000000000000085
++:10075000000000111111110F000000000000000046
++:1007600000000011110A0A0400000000000000004F
++:10077000000000111115150A000000000000000023
++:10078000000000110A040A1100000000000000002F
++:10079000000000111111110F010E000000000000F7
++:1007A0000000001F0204081F0000000000000000FD
++:1007B0000008080808090305070100000000000000
++:1007C000000A0A0A0A0A0A0A0000000000000000E3
++:1007D00000180418041903050701000000000000B8
++:1007E000000004001F0004000000000000000000E2
++:1007F000001F1F1F1F1F1F1F000000000000000020
++:1008000000000000000000000000000000000000E8
++:1008100000000000000000000000000000000000D8
++:1008200000000000000000000000000000000000C8
++:1008300000000000000000000000000000000000B8
++:1008400000000000000000000000000000000000A8
++:100850000000000000000000000000000000000098
++:100860000000000000000000000000000000000088
++:100870000000000000000000000000000000000078
++:100880000000000000000000000000000000000068
++:100890000000000000000000000000000000000058
++:1008A0000000000000000000000000000000000048
++:1008B0000000000000000000000000000000000038
++:1008C0000000000000000000000000000000000028
++:1008D0000000000000000000000000000000000018
++:1008E0000000000000000000000000000000000008
++:1008F00000000000000000000000000000000000F8
++:1009000000000000000000000000000000000000E7
++:1009100000000000000000000000000000000000D7
++:1009200000000000000000000000000000000000C7
++:1009300000000000000000000000000000000000B7
++:1009400000000000000000000000000000000000A7
++:100950000000000000000000000000000000000097
++:100960000000000000000000000000000000000087
++:100970000000000000000000000000000000000077
++:100980000000000000000000000000000000000067
++:100990000000000000000000000000000000000057
++:1009A0000000000000000000000000000000000047
++:1009B0000000000000000000000000000000000037
++:1009C0000000000000000000000000000000000027
++:1009D0000000000000000000000000000000000017
++:1009E0000000000000000000000000000000000007
++:1009F00000000000000000000000000000000000F7
++:100A000080808080808080808080000000000000E6
++:100A1000B8B8B8808080808080800000000000002E
++:100A200087878780808080808080000000000000B1
++:100A3000BFBFBF80808080808080000000000000F9
++:100A4000808080B8B8B8B8808080000000000000C6
++:100A5000B8B8B8B8B8B8B88080800000000000000E
++:100A6000878787B8B8B8B880808000000000000091
++:100A7000BFBFBFB8B8B8B8808080000000000000D9
++:100A8000808080878787878080800000000000004A
++:100A9000B8B8B88787878780808000000000000092
++:100AA0008787878787878780808000000000000015
++:100AB000BFBFBF878787878080800000000000005D
++:100AC000808080BFBFBFBF8080800000000000002A
++:100AD000B8B8B8BFBFBFBF80808000000000000072
++:100AE000878787BFBFBFBF808080000000000000F5
++:100AF000BFBFBFBFBFBFBF8080800000000000003D
++:100B000080808080808080B8B8B80000000000003D
++:100B1000B8B8B880808080B8B8B800000000000085
++:100B200087878780808080B8B8B800000000000008
++:100B3000BFBFBF80808080B8B8B800000000000050
++:100B4000808080B8B8B8B8B8B8B80000000000001D
++:100B5000B8B8B8B8B8B8B8B8B8B800000000000065
++:100B6000878787B8B8B8B8B8B8B8000000000000E8
++:100B7000BFBFBFB8B8B8B8B8B8B800000000000030
++:100B800080808087878787B8B8B8000000000000A1
++:100B9000B8B8B887878787B8B8B8000000000000E9
++:100BA00087878787878787B8B8B80000000000006C
++:100BB000BFBFBF87878787B8B8B8000000000000B4
++:100BC000808080BFBFBFBFB8B8B800000000000081
++:100BD000B8B8B8BFBFBFBFB8B8B8000000000000C9
++:100BE000878787BFBFBFBFB8B8B80000000000004C
++:100BF000BFBFBFBFBFBFBFB8B8B800000000000094
++:100C0000000E11171517100E000000000000000064
++:100C100000040A11111F1111000000000000000063
++:100C2000001E11111E11111E000000000000000026
++:100C3000000E11101010110E000000000000000046
++:100C4000001E11111111111E000000000000000013
++:100C5000001F10101E10101F0000000000000000F8
++:100C6000001F10101E1010100000000000000000F7
++:100C7000000E11101013110F000000000000000002
++:100C8000001111111F1111110000000000000000DF
++:100C9000000E04040404040E000000000000000024
++:100CA000000101010101110E000000000000000020
++:100CB00000111214181412110000000000000000AE
++:100CC000001010101010101F0000000000000000A5
++:100CD00000111B151511111100000000000000008B
++:100CE000001111191513111100000000000000007F
++:100CF000000E11111111110E000000000000000083
++:100D0000001E11111E101010000000000000000055
++:100D1000000E11111115120D00000000000000005E
++:100D2000001E11111E14121100000000000000002E
++:100D3000000E11100E01110E000000000000000056
++:100D4000001F04040404040400000000000000006C
++:100D5000001111111111110E00000000000000001F
++:100D6000001111110A0A0404000000000000000034
++:100D7000001111111515150A0000000000000000F7
++:100D80000011110A040A1111000000000000000007
++:100D90000011110A04040404000000000000000017
++:100DA000001F01020408101F0000000000000000E6
++:100DB000000004081F0804000000000000000000FC
++:100DC00000101010101601020407000000000000BF
++:100DD000000004021F0204000000000000000000E8
++:100DE0000000040E150404000000000000000000D4
++:100DF000000A0A1F0A1F0A0A000000000000000083
++:100E000080808080808080878787000000000000CD
++:100E1000B8B8B88080808087878700000000000015
++:100E20008787878080808087878700000000000098
++:100E3000BFBFBF80808080878787000000000000E0
++:100E4000808080B8B8B8B8878787000000000000AD
++:100E5000B8B8B8B8B8B8B8878787000000000000F5
++:100E6000878787B8B8B8B887878700000000000078
++:100E7000BFBFBFB8B8B8B8878787000000000000C0
++:100E80008080808787878787878700000000000031
++:100E9000B8B8B88787878787878700000000000079
++:100EA00087878787878787878787000000000000FC
++:100EB000BFBFBF8787878787878700000000000044
++:100EC000808080BFBFBFBF87878700000000000011
++:100ED000B8B8B8BFBFBFBF87878700000000000059
++:100EE000878787BFBFBFBF878787000000000000DC
++:100EF000BFBFBFBFBFBFBF87878700000000000024
++:100F000080808080808080BFBFBF00000000000024
++:100F1000B8B8B880808080BFBFBF0000000000006C
++:100F200087878780808080BFBFBF000000000000EF
++:100F3000BFBFBF80808080BFBFBF00000000000037
++:100F4000808080B8B8B8B8BFBFBF00000000000004
++:100F5000B8B8B8B8B8B8B8BFBFBF0000000000004C
++:100F6000878787B8B8B8B8BFBFBF000000000000CF
++:100F7000BFBFBFB8B8B8B8BFBFBF00000000000017
++:100F800080808087878787BFBFBF00000000000088
++:100F9000B8B8B887878787BFBFBF000000000000D0
++:100FA00087878787878787BFBFBF00000000000053
++:100FB000BFBFBF87878787BFBFBF0000000000009B
++:100FC000808080BFBFBFBFBFBFBF00000000000068
++:100FD000B8B8B8BFBFBFBFBFBFBF000000000000B0
++:100FE000878787BFBFBFBFBFBFBF00000000000033
++:100FF000BFBFBFBFBFBFBFBFBFBF0000000000007B
++:00000001FF
+diff --git a/roms/saa5050/saa5050.rom b/roms/saa5050/saa5050.rom
+new file mode 100644
+index 0000000000000000000000000000000000000000..71565e3cf7af216396dab97af8326a10b103347b
+GIT binary patch
+literal 4096
+zcmeHIZI;?F40N(y)}++LfV<H4;j8XHuEamC)|oiyqgPl2@8R)iWJy*+2rqkez;qze
+zLX@3pnq<wzW}E(|)MPK$Q+}^m@cA;vbbJ$>PN!54KLs<oHF&2KN7=%9#Gc?-bIjFf
+zVr>6~2q79l2%3yWkyRKFeO4H!Qp%+9<Bko`5V;JSG;6(W7&k*ve%wrlHfsKDz7Cd$
+z_*#rV^sHDC$RI5buph>q@F)&z&2L$odRdL_UkD8!HE=vpHgXx={pRvnKWD9n{b;3#
+zKa%HHa4z#an|eUPlyCEVoo&AstPQ9BSoRVRVjQREWwzh+f1sK3%HecA9n>G$z_jA>
+zr&b%UluJF@_#kb+SsVgLKInh3^Ge>Hhy1h62g67c{Sw~hi|Lv?Uu)H8io=JN8$G;@
+z|1vM8z7SJOdR$=jzi`7J&j@jBqu~Re9)qW;;iKn6rp;So<Y8~_2iJ#^^nOFw<3zo`
+z0p1wd=jr&(rI~rcwDC#}zxWT&iR<yT{uuZGK3PsX+o1!W(stTSTZy+kuEsxv-{@}@
+zK7?gL4dxAN{LW(p#G~go2>!9N&nxTCgZ87Br_X-~oB-R8WdI}^d3*oB9014j6`&d7
+zI?ekQxuose`^Pgsyq{^JKgV;t7#<C5_Vv-aiT`Wytvm1~*4uEu-`AavZ?~JnkH^Dd
+z07$42y~EHu486k;!i8su-eCfm@X$L90$a>U^bW(>VFH-=V?jesqIbBTt$f!i?pl^4
+zdIDI-(090E=pBZh^@u+f4imtHhu&f6vBj8jzQb^Km;fgJcw4{z|G)A7KZhNLF_HOk
+z7=*)^9ftuhOPpEJI}F0%K6~m9JzQv_?{LK{5FUERLys-)iQZul4imt{pT)qiC3=V9
+u=r9}|24H<w?=bWZ!_i^r;ldo{e1{2O!eiku^w^?_zQYxFt@0}={{H|=Yq~)I
+
+literal 0
+HcmV?d00001
+