├── Command Codes.xlsx ├── LICENSE ├── PCB ├── SBC_rev 3 BOM.txt ├── SBC_rev 3.brd └── SBC_rev 3.sch ├── README.md ├── SBC_rev 3 BOM.csv ├── SBC_rev 3 BOM.txt ├── bin files ├── BASIC.bin ├── basic.asm └── intMEGA.asm ├── code Arduino Leonardo ├── Bug List To Do.xlsx ├── Z80_note_interface_02 │ ├── Z80_note_interface_02.ino │ ├── defines.h │ └── graphics │ │ ├── Menu Header Condensed.png │ │ ├── Menu Header Condensed.psd │ │ ├── Menu header.psd │ │ ├── Tall Font.png │ │ ├── Tall Font.psd │ │ ├── atari font 4x8.png │ │ ├── atari font 4x8.psd │ │ ├── atari font 8x8.png │ │ ├── atari font 8x8.psd │ │ ├── atari-small.bdf │ │ ├── super font 8x8.png │ │ ├── super font 8x8.psd │ │ └── super font.png ├── Z80_note_interface_03 │ ├── Z80_note_interface_03.ino │ ├── defines.h │ └── graphics │ │ ├── Menu Header Condensed.png │ │ ├── Menu Header Condensed.psd │ │ ├── Menu header.psd │ │ ├── Tall Font.png │ │ ├── Tall Font.psd │ │ ├── atari font 4x8.png │ │ ├── atari font 4x8.psd │ │ ├── atari font 8x8.png │ │ ├── atari font 8x8.psd │ │ ├── atari-small.bdf │ │ ├── super font 8x8.png │ │ ├── super font 8x8.psd │ │ └── super font.png └── Z80_note_interface_04 │ ├── Z80_note_interface_04.ino │ ├── defines.h │ └── graphics │ ├── Large Fonts Minimum.png │ ├── Large Fonts Minimum.psd │ ├── Large Fonts.png │ ├── Large Fonts.psd │ ├── Menu Header Condensed.png │ ├── Menu Header Condensed.psd │ ├── Menu header.psd │ ├── Small Font 4x8.png │ ├── Small font 4x8.psd │ ├── Tall Font.png │ ├── Tall Font.psd │ ├── atari font 4x8.png │ ├── atari font 8x8.png │ ├── atari font 8x8.psd │ ├── atari-small.bdf │ ├── super font 8x8.png │ ├── super font 8x8.psd │ └── super font.png ├── docs └── SSD1306.pdf └── schematics └── z80note.png /Command Codes.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/Command Codes.xlsx -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Benjamin J Heckendorn 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /PCB/SBC_rev 3 BOM.txt: -------------------------------------------------------------------------------- 1 | Partlist exported from //benheck-server/Projects/2020/MGC Z80 Project/PCB designs DIP40/SBC_rev 3.sch at 3/7/2020 6:08 PM 2 | 3 | Part Value Device Package Description MF MPN OC_FARNELL OC_NEWARK SPICEPREFIX TP_SIGNAL_NAME 4 | /ATMEL TPB1,27 TPB1,27 B1,27 Test pad 5 | C1 22pf RESISTOR_C-US025-024X044 RESISTOR_C025-024X044 CAPACITOR, American symbol 6 | C2 22pf RESISTOR_C-US025-024X044 RESISTOR_C025-024X044 CAPACITOR, American symbol 7 | C3 .1uf RESISTOR_C-US025-024X044 RESISTOR_C025-024X044 CAPACITOR, American symbol 8 | C4 .1uf RESISTOR_C-US025-024X044 RESISTOR_C025-024X044 CAPACITOR, American symbol 9 | C5 .1uf RESISTOR_C-US025-024X044 RESISTOR_C025-024X044 CAPACITOR, American symbol 10 | C6 .1uf RESISTOR_C-US025-024X044 RESISTOR_C025-024X044 CAPACITOR, American symbol 11 | C7 100uf CPOL-USE2.5-7 E2,5-7 POLARIZED CAPACITOR, American symbol 12 | C8 1uf RESISTOR_C-US025-024X044 RESISTOR_C025-024X044 CAPACITOR, American symbol 13 | CN1 USBMOLEX USB-MINIB-THM-MOLEX USB Connectors 14 | IC1 74ALS00D 74ALS00D SO14 Quad 2-input NAND gate 15 | IC2 74LS138D 74LS138D SO16 3-line to 8-line DECODER/DEMULTIPLEXER 16 | IC4 PCA9534D PCA9534D SO16W 8-bit I2C-bus and SMBus low power I/O port with interrupt PCA9534DB 1408284 18M7513 17 | IC5 PCA9534D PCA9534D SO16W 8-bit I2C-bus and SMBus low power I/O port with interrupt PCA9534DB 1408284 18M7513 18 | IC6 PCA9534D PCA9534D SO16W 8-bit I2C-bus and SMBus low power I/O port with interrupt PCA9534DB 1408284 18M7513 19 | IC7 74LS32D 74LS32D SO14 Quad 2-input OR gate 20 | IC8 Z80CPU DIL40 Z80 FAMILY DEVICE 21 | INT TPB1,27 TPB1,27 B1,27 Test pad 22 | JP1 KEY PINHD-1X2 1X02 PIN HEADER 23 | JP2 FASTCLK PINHD-1X2/90 1X02/90 PIN HEADER 24 | JP3 PINHD-1X2/90 1X02/90 PIN HEADER 25 | LED1 LED3MM LED3MM LED 26 | LED2 LED3MM LED3MM LED 27 | ON LED3MM LED3MM LED 28 | Q1 CRYSTALHC49S HC49/S CRYSTAL 1667008 unknown 29 | R1 1k R-US_R1206 R1206 RESISTOR, American symbol R 30 | R2 1k R-US_R1206 R1206 RESISTOR, American symbol R 31 | R3 10k R-US_R1206 R1206 RESISTOR, American symbol R 32 | R4 10k R-US_R1206 R1206 RESISTOR, American symbol R 33 | R5 10k R-US_R1206 R1206 RESISTOR, American symbol R 34 | R6 1M R-US_R1206 R1206 RESISTOR, American symbol R 35 | R7 22 R-US_R1206 R1206 RESISTOR, American symbol R 36 | R8 22 R-US_R1206 R1206 RESISTOR, American symbol R 37 | R9 10k R-US_R1206 R1206 RESISTOR, American symbol R 38 | R10 10k R-US_R1206 R1206 RESISTOR, American symbol R 39 | R11 10k R-US_R1206 R1206 RESISTOR, American symbol R 40 | R12 10k R-US_R1206 R1206 RESISTOR, American symbol R 41 | R13 10k R-US_R1206 R1206 RESISTOR, American symbol R 42 | R14 10k R-US_R1206 R1206 RESISTOR, American symbol R 43 | R15 1k R-US_R1206 R1206 RESISTOR, American symbol R 44 | R16 10k R-US_R1206 R1206 RESISTOR, American symbol R 45 | R17 10k R-US_R1206 R1206 RESISTOR, American symbol R 46 | R18 10k R-US_R1206 R1206 RESISTOR, American symbol R 47 | RD TPB1,27 TPB1,27 B1,27 Test pad 48 | RN1 RN08 RN-9 RESISTOR NETWORK unknown unknown 49 | RST PROG PINHD-1X1 1X01 Pin header 1x1 for 0.1" spacing 50 | SD_ADAPTER SD_ADAPTER SD_ADAPTER SD_RIGHTANGLE 51 | U$1 CARDSLOT50 CARDSLOT50 CARD50 52 | U$2 ATMEGA32U4-AU ATMEGA32U4-AU TQFP44 http://www.ladyada.net/library/eagle 53 | U$3 IS65C256AL_32KRAM IS65C256AL_32KRAM SO28-3 54 | U$4 IS65C256AL_32KRAM IS65C256AL_32KRAM SO28-3 55 | U$5 TACT TACT 6MM_TACT 56 | U$6 TACT TACT 6MM_TACT 57 | U$7 TACT TACT 6MM_TACT 58 | U$8 TACT TACT 6MM_TACT 59 | U$9 GND_STRIP GND_STRIP GND_PADS 60 | U$10 GND_STRIP GND_STRIP GND_PADS 61 | U$11 GND_STRIP GND_STRIP GND_PADS 62 | U$12 GND_STRIP GND_STRIP GND_PADS 63 | U$13 OLED_SSD1306_I2C OLED_SSD1306_I2C OLED_128X64_I2C 64 | U$14 SKQUCAA010 SKQUCAA010 SKQUCAA010 65 | U$16 SN74LS245 SN74LS245 SO20L 66 | U$17 TACT TACT 6MM_TACT 67 | U$18 SWITCH_1825232-1 SWITCH_1825232-1 SWITCH 68 | U$19 TACT TACT 6MM_TACT 69 | WR TPB1,27 TPB1,27 B1,27 Test pad 70 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # z80note 2 | Single board computer designed for Midwest Gaming Classic 2020 workshop 3 | -------------------------------------------------------------------------------- /SBC_rev 3 BOM.csv: -------------------------------------------------------------------------------- 1 | "Part";"Value";"Device";"Package";"Description";"MF";"MPN";"OC_FARNELL";"OC_NEWARK";"SPICEPREFIX";"TP_SIGNAL_NAME"; 2 | "/ATMEL";"TPB1,27";"TPB1,27";"B1,27";"Test pad";"";"";"";"";"";""; 3 | "C1";"22pf";"RESISTOR_C-US025-024X044";"RESISTOR_C025-024X044";"CAPACITOR, American symbol";"";"";"";"";"";""; 4 | "C2";"22pf";"RESISTOR_C-US025-024X044";"RESISTOR_C025-024X044";"CAPACITOR, American symbol";"";"";"";"";"";""; 5 | "C3";".1uf";"RESISTOR_C-US025-024X044";"RESISTOR_C025-024X044";"CAPACITOR, American symbol";"";"";"";"";"";""; 6 | "C4";".1uf";"RESISTOR_C-US025-024X044";"RESISTOR_C025-024X044";"CAPACITOR, American symbol";"";"";"";"";"";""; 7 | "C5";".1uf";"RESISTOR_C-US025-024X044";"RESISTOR_C025-024X044";"CAPACITOR, American symbol";"";"";"";"";"";""; 8 | "C6";".1uf";"RESISTOR_C-US025-024X044";"RESISTOR_C025-024X044";"CAPACITOR, American symbol";"";"";"";"";"";""; 9 | "C7";"100uf";"CPOL-USE2.5-7";"E2,5-7";"POLARIZED CAPACITOR, American symbol";"";"";"";"";"";""; 10 | "C8";"1uf";"RESISTOR_C-US025-024X044";"RESISTOR_C025-024X044";"CAPACITOR, American symbol";"";"";"";"";"";""; 11 | "CN1";"";"USBMOLEX";"USB-MINIB-THM-MOLEX";"USB Connectors";"";"";"";"";"";""; 12 | "IC1";"74ALS00D";"74ALS00D";"SO14";"Quad 2-input NAND gate";"";"";"";"";"";""; 13 | "IC2";"74LS138D";"74LS138D";"SO16";"3-line to 8-line DECODER/DEMULTIPLEXER";"";"";"";"";"";""; 14 | "IC4";"PCA9534D";"PCA9534D";"SO16W";"8-bit I2C-bus and SMBus low power I/O port with interrupt";"";"PCA9534DB";"1408284";"18M7513";"";""; 15 | "IC5";"PCA9534D";"PCA9534D";"SO16W";"8-bit I2C-bus and SMBus low power I/O port with interrupt";"";"PCA9534DB";"1408284";"18M7513";"";""; 16 | "IC6";"PCA9534D";"PCA9534D";"SO16W";"8-bit I2C-bus and SMBus low power I/O port with interrupt";"";"PCA9534DB";"1408284";"18M7513";"";""; 17 | "IC7";"74LS32D";"74LS32D";"SO14";"Quad 2-input OR gate";"";"";"";"";"";""; 18 | "IC8";"";"Z80CPU";"DIL40";"Z80 FAMILY DEVICE";"";"";"";"";"";""; 19 | "INT";"TPB1,27";"TPB1,27";"B1,27";"Test pad";"";"";"";"";"";""; 20 | "JP1";"KEY";"PINHD-1X2";"1X02";"PIN HEADER";"";"";"";"";"";""; 21 | "JP2";"FASTCLK";"PINHD-1X2/90";"1X02/90";"PIN HEADER";"";"";"";"";"";""; 22 | "JP3";"";"PINHD-1X2/90";"1X02/90";"PIN HEADER";"";"";"";"";"";""; 23 | "LED1";"";"LED3MM";"LED3MM";"LED";"";"";"";"";"";""; 24 | "LED2";"";"LED3MM";"LED3MM";"LED";"";"";"";"";"";""; 25 | "ON";"";"LED3MM";"LED3MM";"LED";"";"";"";"";"";""; 26 | "Q1";"";"CRYSTALHC49S";"HC49/S";"CRYSTAL";"";"";"1667008";"unknown";"";""; 27 | "R1";"1k";"R-US_R1206";"R1206";"RESISTOR, American symbol";"";"";"";"";"R";""; 28 | "R2";"1k";"R-US_R1206";"R1206";"RESISTOR, American symbol";"";"";"";"";"R";""; 29 | "R3";"10k";"R-US_R1206";"R1206";"RESISTOR, American symbol";"";"";"";"";"R";""; 30 | "R4";"10k";"R-US_R1206";"R1206";"RESISTOR, American symbol";"";"";"";"";"R";""; 31 | "R5";"10k";"R-US_R1206";"R1206";"RESISTOR, American symbol";"";"";"";"";"R";""; 32 | "R6";"1M";"R-US_R1206";"R1206";"RESISTOR, American symbol";"";"";"";"";"R";""; 33 | "R7";"22";"R-US_R1206";"R1206";"RESISTOR, American symbol";"";"";"";"";"R";""; 34 | "R8";"22";"R-US_R1206";"R1206";"RESISTOR, American symbol";"";"";"";"";"R";""; 35 | "R9";"10k";"R-US_R1206";"R1206";"RESISTOR, American symbol";"";"";"";"";"R";""; 36 | "R10";"10k";"R-US_R1206";"R1206";"RESISTOR, American symbol";"";"";"";"";"R";""; 37 | "R11";"10k";"R-US_R1206";"R1206";"RESISTOR, American symbol";"";"";"";"";"R";""; 38 | "R12";"10k";"R-US_R1206";"R1206";"RESISTOR, American symbol";"";"";"";"";"R";""; 39 | "R13";"10k";"R-US_R1206";"R1206";"RESISTOR, American symbol";"";"";"";"";"R";""; 40 | "R14";"10k";"R-US_R1206";"R1206";"RESISTOR, American symbol";"";"";"";"";"R";""; 41 | "R15";"1k";"R-US_R1206";"R1206";"RESISTOR, American symbol";"";"";"";"";"R";""; 42 | "R16";"10k";"R-US_R1206";"R1206";"RESISTOR, American symbol";"";"";"";"";"R";""; 43 | "R17";"10k";"R-US_R1206";"R1206";"RESISTOR, American symbol";"";"";"";"";"R";""; 44 | "R18";"10k";"R-US_R1206";"R1206";"RESISTOR, American symbol";"";"";"";"";"R";""; 45 | "RD";"TPB1,27";"TPB1,27";"B1,27";"Test pad";"";"";"";"";"";""; 46 | "RN1";"";"RN08";"RN-9";"RESISTOR NETWORK";"";"";"unknown";"unknown";"";""; 47 | "RST";"PROG";"PINHD-1X1";"1X01";"Pin header 1x1 for 0.1" spacing";"";"";"";"";"";""; 48 | "SD_ADAPTER";"SD_ADAPTER";"SD_ADAPTER";"SD_RIGHTANGLE";"";"";"";"";"";"";""; 49 | "U$1";"CARDSLOT50";"CARDSLOT50";"CARD50";"";"";"";"";"";"";""; 50 | "U$2";"ATMEGA32U4-AU";"ATMEGA32U4-AU";"TQFP44";"http://www.ladyada.net/library/eagle";"";"";"";"";"";""; 51 | "U$3";"IS65C256AL_32KRAM";"IS65C256AL_32KRAM";"SO28-3";"";"";"";"";"";"";""; 52 | "U$4";"IS65C256AL_32KRAM";"IS65C256AL_32KRAM";"SO28-3";"";"";"";"";"";"";""; 53 | "U$5";"TACT";"TACT";"6MM_TACT";"";"";"";"";"";"";""; 54 | "U$6";"TACT";"TACT";"6MM_TACT";"";"";"";"";"";"";""; 55 | "U$7";"TACT";"TACT";"6MM_TACT";"";"";"";"";"";"";""; 56 | "U$8";"TACT";"TACT";"6MM_TACT";"";"";"";"";"";"";""; 57 | "U$9";"GND_STRIP";"GND_STRIP";"GND_PADS";"";"";"";"";"";"";""; 58 | "U$10";"GND_STRIP";"GND_STRIP";"GND_PADS";"";"";"";"";"";"";""; 59 | "U$11";"GND_STRIP";"GND_STRIP";"GND_PADS";"";"";"";"";"";"";""; 60 | "U$12";"GND_STRIP";"GND_STRIP";"GND_PADS";"";"";"";"";"";"";""; 61 | "U$13";"OLED_SSD1306_I2C";"OLED_SSD1306_I2C";"OLED_128X64_I2C";"";"";"";"";"";"";""; 62 | "U$14";"SKQUCAA010";"SKQUCAA010";"SKQUCAA010";"";"";"";"";"";"";""; 63 | "U$16";"SN74LS245";"SN74LS245";"SO20L";"";"";"";"";"";"";""; 64 | "U$17";"TACT";"TACT";"6MM_TACT";"";"";"";"";"";"";""; 65 | "U$18";"SWITCH_1825232-1";"SWITCH_1825232-1";"SWITCH";"";"";"";"";"";"";""; 66 | "U$19";"TACT";"TACT";"6MM_TACT";"";"";"";"";"";"";""; 67 | "WR";"TPB1,27";"TPB1,27";"B1,27";"Test pad";"";"";"";"";"";""; 68 | -------------------------------------------------------------------------------- /SBC_rev 3 BOM.txt: -------------------------------------------------------------------------------- 1 | Partlist exported from C:/Users/ben/Documents/GitHub/z80note/PCB/SBC_rev 3.sch at 10/2/2020 12:00 PM 2 | 3 | Part Value Device Package Description MF MPN OC_FARNELL OC_NEWARK SPICEPREFIX TP_SIGNAL_NAME 4 | /ATMEL TPB1,27 TPB1,27 B1,27 Test pad 5 | C1 22pf RESISTOR_C-US025-024X044 RESISTOR_C025-024X044 CAPACITOR, American symbol 6 | C2 22pf RESISTOR_C-US025-024X044 RESISTOR_C025-024X044 CAPACITOR, American symbol 7 | C3 .1uf RESISTOR_C-US025-024X044 RESISTOR_C025-024X044 CAPACITOR, American symbol 8 | C4 .1uf RESISTOR_C-US025-024X044 RESISTOR_C025-024X044 CAPACITOR, American symbol 9 | C5 .1uf RESISTOR_C-US025-024X044 RESISTOR_C025-024X044 CAPACITOR, American symbol 10 | C6 .1uf RESISTOR_C-US025-024X044 RESISTOR_C025-024X044 CAPACITOR, American symbol 11 | C7 100uf CPOL-USE2.5-7 E2,5-7 POLARIZED CAPACITOR, American symbol 12 | C8 1uf RESISTOR_C-US025-024X044 RESISTOR_C025-024X044 CAPACITOR, American symbol 13 | CN1 USBMOLEX USB-MINIB-THM-MOLEX USB Connectors 14 | IC1 74ALS00D 74ALS00D SO14 Quad 2-input NAND gate 15 | IC2 74LS138D 74LS138D SO16 3-line to 8-line DECODER/DEMULTIPLEXER 16 | IC4 PCA9534D PCA9534D SO16W 8-bit I2C-bus and SMBus low power I/O port with interrupt PCA9534DB 1408284 18M7513 17 | IC5 PCA9534D PCA9534D SO16W 8-bit I2C-bus and SMBus low power I/O port with interrupt PCA9534DB 1408284 18M7513 18 | IC6 PCA9534D PCA9534D SO16W 8-bit I2C-bus and SMBus low power I/O port with interrupt PCA9534DB 1408284 18M7513 19 | IC7 74LS32D 74LS32D SO14 Quad 2-input OR gate 20 | IC8 Z80CPU DIL40 Z80 FAMILY DEVICE 21 | INT TPB1,27 TPB1,27 B1,27 Test pad 22 | JP1 KEY PINHD-1X2 1X02 PIN HEADER 23 | JP2 FASTCLK PINHD-1X2/90 1X02/90 PIN HEADER 24 | JP3 PINHD-1X2/90 1X02/90 PIN HEADER 25 | LED1 LED3MM LED3MM LED 26 | LED2 LED3MM LED3MM LED 27 | ON LED3MM LED3MM LED 28 | Q1 CRYSTALHC49S HC49/S CRYSTAL 1667008 unknown 29 | R1 1k R-US_R1206 R1206 RESISTOR, American symbol R 30 | R2 1k R-US_R1206 R1206 RESISTOR, American symbol R 31 | R3 10k R-US_R1206 R1206 RESISTOR, American symbol R 32 | R4 10k R-US_R1206 R1206 RESISTOR, American symbol R 33 | R5 10k R-US_R1206 R1206 RESISTOR, American symbol R 34 | R6 1M R-US_R1206 R1206 RESISTOR, American symbol R 35 | R7 22 R-US_R1206 R1206 RESISTOR, American symbol R 36 | R8 22 R-US_R1206 R1206 RESISTOR, American symbol R 37 | R9 10k R-US_R1206 R1206 RESISTOR, American symbol R 38 | R10 10k R-US_R1206 R1206 RESISTOR, American symbol R 39 | R11 10k R-US_R1206 R1206 RESISTOR, American symbol R 40 | R12 10k R-US_R1206 R1206 RESISTOR, American symbol R 41 | R13 10k R-US_R1206 R1206 RESISTOR, American symbol R 42 | R14 10k R-US_R1206 R1206 RESISTOR, American symbol R 43 | R15 1k R-US_R1206 R1206 RESISTOR, American symbol R 44 | R16 10k R-US_R1206 R1206 RESISTOR, American symbol R 45 | R17 10k R-US_R1206 R1206 RESISTOR, American symbol R 46 | R18 10k R-US_R1206 R1206 RESISTOR, American symbol R 47 | RD TPB1,27 TPB1,27 B1,27 Test pad 48 | RN1 RN08 RN-9 RESISTOR NETWORK unknown unknown 49 | RST PROG PINHD-1X1 1X01 Pin header 1x1 for 0.1" spacing 50 | SD_ADAPTER SD_ADAPTER SD_ADAPTER SD_RIGHTANGLE 51 | U$1 CARDSLOT50 CARDSLOT50 CARD50 52 | U$2 ATMEGA32U4-AU ATMEGA32U4-AU TQFP44 http://www.ladyada.net/library/eagle 53 | U$3 IS65C256AL_32KRAM IS65C256AL_32KRAM SO28-3 54 | U$4 IS65C256AL_32KRAM IS65C256AL_32KRAM SO28-3 55 | U$5 TACT TACT 6MM_TACT 56 | U$6 TACT TACT 6MM_TACT 57 | U$7 TACT TACT 6MM_TACT 58 | U$8 TACT TACT 6MM_TACT 59 | U$9 GND_STRIP GND_STRIP GND_PADS 60 | U$10 GND_STRIP GND_STRIP GND_PADS 61 | U$11 GND_STRIP GND_STRIP GND_PADS 62 | U$12 GND_STRIP GND_STRIP GND_PADS 63 | U$13 OLED_SSD1306_I2C OLED_SSD1306_I2C OLED_128X64_I2C 64 | U$14 SKQUCAA010 SKQUCAA010 SKQUCAA010 65 | U$16 SN74LS245 SN74LS245 SO20L 66 | U$17 TACT TACT 6MM_TACT 67 | U$18 SWITCH_1825232-1 SWITCH_1825232-1 SWITCH 68 | U$19 TACT TACT 6MM_TACT 69 | WR TPB1,27 TPB1,27 B1,27 Test pad 70 | -------------------------------------------------------------------------------- /bin files/BASIC.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/bin files/BASIC.bin -------------------------------------------------------------------------------- /bin files/intMEGA.asm: -------------------------------------------------------------------------------- 1 | ;================================================================================== 2 | ; Contents of this file are copyright Grant Searle 3 | ; 4 | ; You have permission to use this for NON COMMERCIAL USE ONLY 5 | ; If you wish to use it elsewhere, please include an acknowledgement to myself. 6 | ; 7 | ; http://searle.hostei.com/grant/index.html 8 | ; 9 | ; eMail: home.micros01@btinternet.com 10 | ; 11 | ; If the above don't work, please perform an Internet search to see if I have 12 | ; updated the web page hosting service. 13 | ; 14 | ;================================================================================== 15 | 16 | ; Minimum 6850 ACIA interrupt driven serial I/O to run modified NASCOM Basic 4.7 17 | ; Full input buffering with incoming data hardware handshaking 18 | ; Handshake shows full before the buffer is totally filled to allow run-on from the sender 19 | 20 | SER_BUFSIZE .EQU 3FH 21 | SER_FULLSIZE .EQU 30H 22 | SER_EMPTYSIZE .EQU 5 23 | 24 | RTS_HIGH .EQU 0D6H 25 | RTS_LOW .EQU 096H 26 | 27 | serBuf .EQU $2000 28 | serInPtr .EQU serBuf+SER_BUFSIZE 29 | serRdPtr .EQU serInPtr+2 30 | serBufUsed .EQU serRdPtr+2 31 | basicStarted .EQU serBufUsed+1 32 | TEMPSTACK .EQU $20ED ; Top of BASIC line input buffer so is "free ram" when BASIC resets 33 | 34 | CR .EQU 0DH 35 | LF .EQU 0AH 36 | CS .EQU 0CH ; Clear screen 37 | 38 | .ORG $0000 39 | ;------------------------------------------------------------------------------ 40 | ; Reset 41 | 42 | RST00 DI ;Disable interrupts 43 | JP INIT ;Initialize Hardware and go 44 | 45 | ;------------------------------------------------------------------------------ 46 | ; TX a character over RS232 47 | 48 | .ORG 0008H 49 | RST08 JP TXA 50 | 51 | ;------------------------------------------------------------------------------ 52 | ; RX a character over RS232 Channel A [Console], hold here until char ready. 53 | 54 | .ORG 0010H 55 | RST10 JP RXA 56 | 57 | ;------------------------------------------------------------------------------ 58 | ; Check serial status 59 | 60 | .ORG 0018H 61 | RST18 JP CKINCHAR 62 | 63 | ;------------------------------------------------------------------------------ 64 | ; RST 38 - INTERRUPT VECTOR [ for IM 1 ] 65 | 66 | .ORG 0038H 67 | RST38 JR serialInt 68 | 69 | ;------------------------------------------------------------------------------ 70 | serialInt: PUSH AF 71 | PUSH HL 72 | 73 | ;IN A,($80) 74 | ;AND $01 ; Check if interupt due to read buffer full 75 | ;JR Z,rts0 ; if not, ignore 76 | 77 | IN A,($81) ;Get char 78 | PUSH AF 79 | LD A,(serBufUsed) 80 | CP SER_BUFSIZE ; If full then ignore 81 | JR NZ,notFull 82 | POP AF 83 | JR rts0 84 | 85 | notFull: LD HL,(serInPtr) 86 | INC HL 87 | LD A,L ; Only need to check low byte becasuse buffer<256 bytes 88 | CP (serBuf+SER_BUFSIZE) & $FF 89 | JR NZ, notWrap 90 | LD HL,serBuf 91 | notWrap: LD (serInPtr),HL 92 | POP AF 93 | LD (HL),A 94 | LD A,(serBufUsed) 95 | INC A 96 | LD (serBufUsed),A 97 | CP SER_FULLSIZE 98 | JR C,rts0 99 | LD A,RTS_HIGH 100 | ;OUT ($80),A ;Control register change? 101 | rts0: POP HL 102 | POP AF 103 | EI 104 | RETI 105 | 106 | ;------------------------------------------------------------------------------ 107 | RXA: 108 | waitForChar: LD A,(serBufUsed) 109 | CP $00 110 | JR Z, waitForChar 111 | PUSH HL 112 | LD HL,(serRdPtr) 113 | INC HL 114 | LD A,L ; Only need to check low byte becasuse buffer<256 bytes 115 | CP (serBuf+SER_BUFSIZE) & $FF 116 | JR NZ, notRdWrap 117 | LD HL,serBuf 118 | notRdWrap: DI 119 | LD (serRdPtr),HL 120 | LD A,(serBufUsed) 121 | DEC A 122 | LD (serBufUsed),A 123 | CP SER_EMPTYSIZE 124 | JR NC,rts1 125 | LD A,RTS_LOW 126 | ; OUT ($80),A ;Control register change? 127 | rts1: 128 | LD A,(HL) 129 | EI 130 | POP HL 131 | RET ; Char ready in A 132 | 133 | ;------------------------------------------------------------------------------ 134 | TXA: ;PUSH AF ; Store character 135 | conout1: ;IN A,($80) ; Status byte 136 | ;BIT 1,A ; Set Zero flag if still transmitting character 137 | ;JR Z,conout1 ; Loop until flag signals ready 138 | ;POP AF ; Retrieve character 139 | OUT ($81),A ; Output the character 140 | RET 141 | 142 | ;------------------------------------------------------------------------------ 143 | CKINCHAR LD A,(serBufUsed) 144 | CP $0 145 | RET 146 | 147 | PRINT: LD A,(HL) ; Get character 148 | OR A ; Is it $00 ? 149 | RET Z ; Then RETurn on terminator 150 | RST 08H ; Print it 151 | INC HL ; Next Character 152 | JR PRINT ; Continue until $00 153 | RET 154 | ;------------------------------------------------------------------------------ 155 | INIT: 156 | LD HL,TEMPSTACK ; Temp stack 157 | LD SP,HL ; Set up a temporary stack 158 | LD HL,serBuf 159 | LD (serInPtr),HL 160 | LD (serRdPtr),HL 161 | XOR A ;0 to accumulator 162 | LD (serBufUsed),A 163 | LD A,RTS_LOW 164 | ;OUT ($80),A ; Initialise ACIA 165 | IM 1 166 | EI 167 | LD HL,SIGNON1 ; Sign-on message 168 | CALL PRINT ; Output string 169 | LD A,(basicStarted); Check the BASIC STARTED flag 170 | CP 'Y' ; to see if this is power-up 171 | JR NZ,COLDSTART ; If not BASIC started then always do cold start 172 | LD HL,SIGNON2 ; Cold/warm message 173 | CALL PRINT ; Output string 174 | CORW: 175 | CALL RXA 176 | AND %11011111 ; lower to uppercase 177 | CP 'C' 178 | JR NZ, CHECKWARM 179 | RST 08H 180 | LD A,$0D 181 | RST 08H 182 | LD A,$0A 183 | RST 08H 184 | COLDSTART: LD A,'Y' ; Set the BASIC STARTED flag 185 | LD (basicStarted),A 186 | JP $0150 ; Start BASIC COLD 187 | CHECKWARM: 188 | CP 'W' 189 | JR NZ, CORW 190 | RST 08H 191 | LD A,$0D 192 | RST 08H 193 | LD A,$0A 194 | RST 08H 195 | JP $0153 ; Start BASIC WARM 196 | 197 | SIGNON1: .BYTE CS 198 | .BYTE "Z80 SBC By Grant Searle",CR,LF,0 199 | SIGNON2: .BYTE CR,LF 200 | .BYTE "Cold or warm start (C or W)? ",0 201 | 202 | .END 203 | -------------------------------------------------------------------------------- /code Arduino Leonardo/Bug List To Do.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Bug List To Do.xlsx -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_02/Z80_note_interface_02.ino: -------------------------------------------------------------------------------- 1 | #include "defines.h" 2 | #include 3 | #include 4 | #include 5 | 6 | int8_t _vccstate; 7 | int8_t _i2caddr; 8 | 9 | uint8_t serialFlag = 0; 10 | 11 | char ourByte = 0; 12 | 13 | uint8_t winY = 0; 14 | uint8_t cursorX = 0; 15 | uint8_t cursorY = 0; 16 | 17 | uint8_t tileMap[32][8]; //Set character screen memory. Always 8 characters high, but up to 32 wide if in "hi res" mode 18 | uint8_t menuMap[8][16]; //The memory map for menus. Separate from terminal tile map so they don't overwrite each other 19 | uint8_t fileName[13]; 20 | 21 | uint8_t cursorStatus = 1; //If cursor is on or not 22 | uint8_t columns = 32; //How wide our display is set at 23 | uint8_t rows = 8; //Total rows in memory. Window size is 32/16x8 24 | uint8_t blink; 25 | 26 | #define atmelSelect 1 //The digital pin the Z80 selects the Atmel IO with 27 | #define z80Reset 7 28 | #define z80WR 12 29 | #define z80RD 5 30 | #define z80BUSREQ 6 31 | #define z80IRQ A4 32 | 33 | #define reboot 27 34 | 35 | #define joyUp 0x01 36 | #define joyDown 0x02 37 | #define joyLeft 0x04 38 | #define joyRight 0x08 39 | #define joyA 0x10 40 | #define joyB 0x20 41 | #define joyMenu 0x40 42 | #define joyStart 0x80 43 | 44 | uint8_t dPadBounceEnable = 0xFF; //At the start all buttons require re-trigger 45 | uint8_t dPadBounce = 0; //The debounce clear bit for each button 46 | 47 | uint8_t rebootFlag = 0; //Set this so system always starts in reboot mode 48 | 49 | uint8_t displayMode = 1; //0 = terminal 50 | uint8_t whichMenu = 1; //Which menu we are in if in menu mode (such as SD load, RAM dump, setting etc) 51 | 52 | uint8_t controls; 53 | 54 | uint8_t animation = 0; 55 | 56 | uint8_t charSetOffset = 32; //ASCII ofset memory pointer. 0 for 8x8 font, 32 for 4x8 font 57 | 58 | #define showTerminal 0 59 | #define showMenu 1 60 | 61 | uint8_t menuAnimate = 0; 62 | uint8_t menuAnimateRowT = 8; 63 | uint8_t menuAnimateRowM = 0; 64 | 65 | uint8_t menuX = 0; //Menu cursors 66 | uint8_t menuY = 0; 67 | uint8_t menuYmax; //The maximum far down you can move the menuY cursor when selecting a file 68 | uint8_t firstFile = 0; //The first file we should display (if we scroll past 6 entires) 69 | uint8_t filesInFolder = 0; //The total # of files in directory. We display files "firstFile to firstFile + 5" 70 | 71 | uint8_t BASICtype = 0; //Flag if we're having the MCU type in BASIC commands such as RUN (to start a game without keyboard for instance) 72 | 73 | void setup() { 74 | 75 | Serial.begin(115200); //Start USB serial 76 | Serial1.begin(115200); //Start hardware UART 77 | UCSR1B &= ~(1 << 3); //Disable transmit on hardware UART (RX only, for example external serial keyboard) 78 | 79 | Wire.begin(); // I2C Init 80 | 81 | OLEDbegin(SSD1306_SWITCHCAPVCC, 0x3C); 82 | 83 | TWBR = 6; //Change prescaler to increase I2C speed to max of 400KHz 84 | 85 | digitalWrite(z80IRQ, 0); //Low to start (should see if we can make this a pulled-up input for external devices) 86 | pinMode(z80IRQ, INPUT); //IRQ to Z80. Start this as an input so the pull-up resistor takes it to HIGH 87 | 88 | digitalWrite(z80Reset, 0); //Reset z80 right away 89 | pinMode(z80Reset, OUTPUT); 90 | delay(1); 91 | pinMode(z80Reset, INPUT); //Release reset 92 | 93 | pinMode(z80WR, INPUT); //Write 94 | pinMode(z80RD, INPUT); //Read 95 | 96 | DDRE |= (1 << 2); //Slow clock (HWB, not sure if it's attached to a Digital Pin) 97 | 98 | analogWrite(13, 128); //bootstrap high speed clock 99 | 100 | OCR4A = 4; 101 | OCR4C = 6; 102 | PLLFRQ = B01111010; 103 | TCCR4B = B00000001; 104 | TCCR4A = B10000010; 105 | 106 | pinMode(11, INPUT); //Upper nibble of data bus 107 | pinMode(10, INPUT); 108 | pinMode(9, INPUT); 109 | pinMode(8, INPUT); 110 | 111 | pinMode(A0, INPUT); //Lower nibble of data bus 112 | pinMode(A1, INPUT); 113 | pinMode(A2, INPUT); 114 | pinMode(A3, INPUT); 115 | 116 | addressRelease(); 117 | 118 | pinMode(atmelSelect , INPUT); //Atmel chip select 119 | 120 | textln("Z80 NOTE by Ben Heck"); 121 | display4x8(8); 122 | delay(500); 123 | 124 | if (!SD.begin(4)) { 125 | text("SD card boot FAIL"); 126 | } 127 | else { 128 | text("SD card boot OK"); 129 | } 130 | 131 | display4x8(8); 132 | delay(500); 133 | 134 | attachInterrupt(digitalPinToInterrupt(atmelSelect), access, FALLING); //Setup interrupt vector for when Z80 sends bytes to MCU 135 | 136 | whichMenu = 0x80; //Set menu 0, with MSB set as flag that menu needs to be drawn 137 | 138 | displayModeChangeTo(showMenu, 1); 139 | 140 | } 141 | 142 | void loop() { 143 | 144 | if (rebootFlag) { 145 | switch(rebootFlag) { 146 | case 1: 147 | //streamLoad(); 148 | break; 149 | case 2: 150 | RAMdump(); 151 | break; 152 | case 3: 153 | //bootUp(); 154 | break; 155 | } 156 | rebootFlag = 0; 157 | } 158 | 159 | if (cursorStatus) { 160 | if (++blink == 18) { 161 | tileMap[cursorX][cursorY] = 95; 162 | } 163 | if (blink == 36) { 164 | blink = 0; 165 | tileMap[cursorX][cursorY] = 0; 166 | } 167 | } 168 | 169 | display4x8(menuAnimateRowT); 170 | displayMenu(menuAnimateRowM); 171 | 172 | switch(menuAnimate) { 173 | 174 | case 1: 175 | menuAnimateRowM++; 176 | if (--menuAnimateRowT == 0) { 177 | menuAnimate = 0; 178 | } 179 | break; 180 | 181 | case 2: 182 | menuAnimateRowM--; 183 | if (++menuAnimateRowT == 8) { 184 | menuAnimate = 0; 185 | } 186 | break; 187 | 188 | } 189 | 190 | controls = getButtons(); 191 | 192 | if (buttonMenu() and !menuAnimate) { 193 | if (displayMode == showTerminal) { 194 | displayModeChangeTo(showMenu, 1); 195 | } 196 | else { 197 | displayModeChangeTo(showTerminal, 1); 198 | } 199 | } 200 | 201 | if (displayMode == showMenu) { 202 | 203 | switch(whichMenu & 0x7F) { //The top bit is set when changing menus and tells the system to redraw new menu 204 | 205 | case 0: 206 | BASICmenu(); 207 | break; 208 | case 1: 209 | SDLoadMenu(); 210 | break; 211 | case 2: 212 | RAMDUMPMenu(); 213 | break; 214 | case 3: 215 | settingsMenu(); 216 | break; 217 | 218 | } 219 | 220 | 221 | } 222 | 223 | if (dLeft() and whichMenu > 0) { 224 | 225 | whichMenu = (whichMenu - 1) | 0x80; 226 | 227 | } 228 | 229 | if (dRight() and whichMenu < 4) { 230 | 231 | whichMenu = (whichMenu + 1) | 0x80; 232 | 233 | } 234 | 235 | if (Serial1.available() and !serialFlag) { //Hardware UART (such as a serial keyboard) 236 | 237 | serialFlag = 1; //Won't re-trigger until Z80 handles this 238 | ourByte = Serial1.read(); //Get byte from the hardware UART buffer 239 | DDRF |= (1 << 1); //Turn this pin into an OUTPUT to pull IRQ low 240 | 241 | } 242 | 243 | if (Serial.available() and !serialFlag) { //USB serial (from a host PC) 244 | 245 | serialFlag = 1; //Won't re-trigger until Z80 handles this 246 | ourByte = Serial.read(); //Get byte from the USB buffer 247 | DDRF |= (1 << 1); //Turn this pin into an OUTPUT to pull IRQ low 248 | 249 | } 250 | 251 | if (BASICtype) { 252 | 253 | ourByte = fileName[BASICtype++]; 254 | 255 | if (ourByte) { 256 | serialFlag = 1; //Won't re-trigger until Z80 handles this 257 | DDRF |= (1 << 1); //Turn this pin into an OUTPUT to pull IRQ low 258 | } 259 | else { 260 | BASICtype = 0; 261 | } 262 | 263 | } 264 | 265 | } 266 | 267 | void displayModeChangeTo(uint8_t whatMode, uint8_t doAnimate) { 268 | 269 | displayMode = whatMode; 270 | 271 | switch(whatMode) { 272 | 273 | case showTerminal: 274 | 275 | charSetOffset = 32; 276 | if (doAnimate) { 277 | menuAnimate = 2; 278 | menuAnimateRowT = 0; 279 | menuAnimateRowM = 8; 280 | } 281 | else { 282 | menuAnimateRowT = 8; 283 | menuAnimateRowM = 0; 284 | } 285 | 286 | break; 287 | 288 | case showMenu: 289 | charSetOffset = 0; 290 | if (doAnimate) { 291 | menuAnimate = 1; 292 | menuAnimateRowT = 8; 293 | menuAnimateRowM = 0; 294 | } 295 | else { 296 | menuAnimateRowT = 0; 297 | menuAnimateRowM = 8; 298 | } 299 | break; 300 | 301 | } 302 | 303 | } 304 | 305 | void setupMenu() { 306 | 307 | menuMap[0][0] = 1; //Draw left edge 308 | menuMap[1][0] = 5; 309 | 310 | menuMap[0][1] = 171; //Draw default arrows 311 | menuMap[1][1] = 187; 312 | menuMap[0][12] = 173; 313 | menuMap[1][12] = 189; 314 | 315 | for (int x = 2 ; x < 5 ; x++) { //Draw Z80 note logo 316 | 317 | menuMap[0][11 + x] = x; 318 | menuMap[1][11 + x] = x + 4; 319 | 320 | } 321 | 322 | menuClear(); 323 | 324 | charSetOffset = 0; 325 | 326 | } 327 | 328 | void BASICmenu() { 329 | 330 | if (whichMenu & 0x80) { //MSB set? Redraw menu 331 | setupMenu(); //Basic menu text 332 | //---------xxxxxxxxxx---- 333 | menuTitle("BASIC@HELP"); 334 | 335 | menuY = 2; 336 | menuMap[menuY][0] = '>'; 337 | 338 | whichMenu &= 0x7F; //AND off the MSB 339 | 340 | menuText("W + RUN CR", &menuMap[2][1]); 341 | menuText("RUN CR", &menuMap[3][1]); 342 | menuText("BREAK", &menuMap[4][1]); 343 | menuText("LIST", &menuMap[5][1]); 344 | } 345 | 346 | if (dDown() and menuY < 7) { 347 | menuMap[menuY][0] = 0; 348 | menuMap[++menuY][0] = '>'; 349 | } 350 | 351 | if (dUp() and menuY > 2) { 352 | menuMap[menuY][0] = 0; 353 | menuMap[--menuY][0] = '>'; 354 | } 355 | 356 | if (buttonA()) { //Execute a BASIC command 357 | switch(menuY) { 358 | case 2: 359 | BASICcommand("WRUN"); 360 | break; 361 | case 3: 362 | BASICcommand("RUN"); 363 | break; 364 | case 4: 365 | fileName[1] = 3; //Break 366 | fileName[2] = 0; 367 | break; 368 | case 5: 369 | BASICcommand("LIST"); 370 | break; 371 | } 372 | 373 | BASICtype = 1; //Flag to start typing in bytes 374 | displayModeChangeTo(showTerminal, 0); //Switch to BASIC immediately no animation 375 | 376 | } 377 | 378 | } 379 | 380 | void settingsMenu() { 381 | 382 | if (whichMenu & 0x80) { //MSB set? Redraw menu 383 | setupMenu(); //Basic menu text 384 | //---------xxxxxxxxxx---- 385 | menuTitle("@SETTINGS@"); 386 | 387 | menuY = 2; 388 | menuMap[menuY][0] = '>'; 389 | 390 | whichMenu &= 0x7F; //AND off the MSB 391 | 392 | } 393 | 394 | } 395 | 396 | void RAMDUMPMenu() { 397 | 398 | if (whichMenu & 0x80) { //MSB set? Redraw menu 399 | setupMenu(); //Basic menu text 400 | //---------xxxxxxxxxx---- 401 | menuTitle("RAM_DUMPER"); 402 | 403 | menuY = 2; 404 | menuMap[menuY][0] = '>'; 405 | 406 | whichMenu &= 0x7F; //AND off the MSB 407 | 408 | } 409 | 410 | } 411 | 412 | void SDLoadMenu() { 413 | 414 | if (whichMenu & 0x80) { //MSB set? Redraw menu 415 | 416 | setupMenu(); //Basic menu text 417 | //---------xxxxxxxxxx---- 418 | menuTitle("@SD@@LOAD@"); 419 | 420 | firstFile = 1; //To start, the first file list should be the first one found on the card (no scroll) 421 | menuY = 2; //Reset selection cursor 422 | drawFiles(); 423 | whichMenu &= 0x7F; //AND off the MSB 424 | 425 | } 426 | 427 | if (dDown()) { 428 | if (menuY == 7 and menuYmax > menuY) { //Did we reach the botton and are there more entries? Scroll down 429 | firstFile++; 430 | drawFiles(); 431 | } 432 | else { 433 | if (menuY < menuYmax) { 434 | menuMap[menuY][0] = 0; 435 | menuMap[++menuY][0] = '>'; 436 | } 437 | } 438 | } 439 | 440 | if (dUp()) { 441 | if (menuY == 2) { //If at the top, check if we can scroll up 442 | if (firstFile > 1) { 443 | firstFile--; 444 | drawFiles(); 445 | } 446 | } 447 | else { //Else just move cursor up 448 | menuMap[menuY][0] = 0; 449 | menuMap[--menuY][0] = '>'; 450 | } 451 | } 452 | 453 | if (buttonA()) { 454 | for (int x = 0 ; x < 12 ; x++) { 455 | fileName[x] = menuMap[menuY][1 + x]; 456 | } 457 | streamLoad(); //Load the selected file on screen 458 | } 459 | 460 | } 461 | 462 | void menuTitle(const char *str) { 463 | 464 | uint8_t countPos = 2; 465 | 466 | while (countPos < 12 and *str) { 467 | 468 | char theLetter = *str++ - 64; //Zero offset the letters 469 | 470 | if (theLetter > 15) { 471 | theLetter += 16; 472 | } 473 | 474 | menuMap[0][countPos] = theLetter + 128; 475 | menuMap[1][countPos++] = theLetter + 144; 476 | 477 | } 478 | 479 | } 480 | 481 | void drawFiles() { 482 | 483 | menuClear(); //Clear the text portion 484 | menuMap[menuY][0] = '>'; //Draw cursor 485 | 486 | uint8_t drawRow = 2; //What row to draw filename on 487 | uint8_t filesFound = 0; 488 | 489 | menuYmax = 64; 490 | 491 | File root = SD.open("/"); 492 | root.rewindDirectory(); 493 | 494 | while (true) { 495 | 496 | File entry = root.openNextFile(); 497 | 498 | if (! entry) { 499 | menuYmax = drawRow - 1; 500 | break; 501 | } 502 | 503 | if (drawRow == 8) { 504 | break; 505 | } 506 | 507 | filesFound++; 508 | 509 | if (filesFound >= firstFile) { 510 | if (entry.isDirectory()) { 511 | menuMap[drawRow][1] = 94; //Draw folder icon 512 | menuText(entry.name(), &menuMap[drawRow++][2]); 513 | } 514 | else { 515 | menuText(entry.name(), &menuMap[drawRow++][1]); 516 | } 517 | 518 | } 519 | 520 | entry.close(); 521 | 522 | } 523 | 524 | root.close(); 525 | 526 | } 527 | 528 | void BASICcommand(const char *str) { 529 | 530 | BASICtype = 1; //Use as local pointer 531 | 532 | memset(&fileName, 0, 13); //Make sure filename is zero'd out so terminators work 533 | 534 | while(*str) { 535 | fileName[BASICtype++] = *str++; 536 | } 537 | 538 | fileName[BASICtype] = 13; //Carriage return 539 | 540 | BASICtype = 1; //Flag to type this "serially" into Z80 BASIC 541 | 542 | } 543 | 544 | uint8_t dUp() { 545 | 546 | if (controls & joyUp) { //Pressed? See if bit is set 547 | 548 | if (dPadBounceEnable & joyUp) { //Checking for retriggers? 549 | if (dPadBounce & joyUp) { //Bit still set? No dice 550 | return 0; 551 | } 552 | dPadBounce |= joyUp; //Bit clear? Set it 553 | return 1; //and return status 554 | } 555 | else { 556 | return 1; 557 | } 558 | } 559 | else { 560 | dPadBounce &= ~joyUp; //Button not pressed? Clear the bit, allowing a retrigger 561 | return 0; 562 | } 563 | 564 | } 565 | 566 | uint8_t dDown() { 567 | 568 | if (controls & joyDown) { //Pressed? See if bit is set 569 | 570 | if (dPadBounceEnable & joyDown) { //Checking for retriggers? 571 | if (dPadBounce & joyDown) { //Bit still set? No dice 572 | return 0; 573 | } 574 | dPadBounce |= joyDown; //Bit clear? Set it 575 | return 1; //and return status 576 | } 577 | else { 578 | return 1; 579 | } 580 | } 581 | else { 582 | dPadBounce &= ~joyDown; //Button not pressed? Clear the bit, allowing a retrigger 583 | return 0; 584 | } 585 | 586 | } 587 | 588 | uint8_t dLeft() { 589 | 590 | if (controls & joyLeft) { //Pressed? See if bit is set 591 | 592 | if (dPadBounceEnable & joyLeft) { //Checking for retriggers? 593 | if (dPadBounce & joyLeft) { //Bit still set? No dice 594 | return 0; 595 | } 596 | dPadBounce |= joyLeft; //Bit clear? Set it 597 | return 1; //and return status 598 | } 599 | else { 600 | return 1; 601 | } 602 | } 603 | else { 604 | dPadBounce &= ~joyLeft; //Button not pressed? Clear the bit, allowing a retrigger 605 | } 606 | 607 | } 608 | 609 | uint8_t dRight() { 610 | 611 | if (controls & joyRight) { //Pressed? See if bit is set 612 | 613 | if (dPadBounceEnable & joyRight) { //Checking for retriggers? 614 | if (dPadBounce & joyRight) { //Bit still set? No dice 615 | return 0; 616 | } 617 | dPadBounce |= joyRight; //Bit clear? Set it 618 | return 1; //and return status 619 | } 620 | else { 621 | return 1; 622 | } 623 | 624 | } 625 | else { 626 | dPadBounce &= ~joyRight; //Button not pressed? Clear the bit, allowing a retrigger 627 | } 628 | 629 | } 630 | 631 | uint8_t buttonA() { 632 | 633 | if (controls & joyA) { //Pressed? See if bit is set 634 | 635 | if (dPadBounceEnable & joyA) { //Checking for retriggers? 636 | if (dPadBounce & joyA) { //Bit still set? No dice 637 | return 0; 638 | } 639 | dPadBounce |= joyA; //Bit clear? Set it 640 | return 1; //and return status 641 | } 642 | else { 643 | return 1; 644 | } 645 | } 646 | else { 647 | dPadBounce &= ~joyA; //Button not pressed? Clear the bit, allowing a retrigger 648 | } 649 | 650 | } 651 | 652 | uint8_t buttonB() { 653 | 654 | if (controls & joyB) { //Pressed? See if bit is set 655 | 656 | if (dPadBounceEnable & joyB) { //Checking for retriggers? 657 | if (dPadBounce & joyB) { //Bit still set? No dice 658 | return 0; 659 | } 660 | dPadBounce |= joyB; //Bit clear? Set it 661 | return 1; //and return status 662 | } 663 | else { 664 | return 1; 665 | } 666 | } 667 | else { 668 | dPadBounce &= ~joyB; //Button not pressed? Clear the bit, allowing a retrigger 669 | } 670 | 671 | } 672 | 673 | uint8_t buttonStart() { 674 | 675 | if (controls & joyStart) { //Pressed? See if bit is set 676 | 677 | if (dPadBounceEnable & joyStart) { //Checking for retriggers? 678 | if (dPadBounce & joyStart) { //Bit still set? No dice 679 | return 0; 680 | } 681 | dPadBounce |= joyStart; //Bit clear? Set it 682 | return 1; //and return status 683 | } 684 | else { 685 | return 1; 686 | } 687 | } 688 | else { 689 | dPadBounce &= ~joyStart; //Button not pressed? Clear the bit, allowing a retrigger 690 | } 691 | 692 | } 693 | 694 | uint8_t buttonMenu() { 695 | 696 | if (controls & joyMenu) { //Pressed? See if bit is set 697 | 698 | if (dPadBounceEnable & joyMenu) { //Checking for retriggers? 699 | if (dPadBounce & joyMenu) { //Bit still set? No dice 700 | return 0; 701 | } 702 | dPadBounce |= joyMenu; //Bit clear? Set it 703 | return 1; //and return status 704 | } 705 | else { 706 | return 1; 707 | } 708 | } 709 | else { 710 | dPadBounce &= ~joyMenu; //Button not pressed? Clear the bit, allowing a retrigger 711 | } 712 | 713 | } 714 | 715 | void menuClear() { 716 | 717 | memset(&menuMap[2][0], 0, 96); //Clear everything under header (0 makes a space as does 32) 718 | 719 | } 720 | 721 | void streamLoad() { 722 | 723 | rebootFlag = 0; 724 | 725 | requestBus(); 726 | 727 | TCCR4A = 0; //Fast clock OFF; 728 | 729 | File whichFile = SD.open(fileName); 730 | 731 | menuClear(); 732 | 733 | menuText("LOADING", &menuMap[5][4]); 734 | 735 | displayMenu(8); 736 | 737 | memoryControl(1); //Take control of memory 738 | dataOut(); //Assert bus 739 | uint16_t errors = 0; 740 | addressControl(); 741 | 742 | uint16_t memPointer = 0; 743 | 744 | while(whichFile.available()) { 745 | 746 | uint8_t toWrite = whichFile.read(); 747 | 748 | dataOut(); //Assert bus 749 | 750 | if (!(memPointer & 0x00FF)) { //Start of page? Assert page #. This reduces I2C access time 751 | addressAssertHalf(0x21, memPointer >> 8); //Set high byte page # 752 | } 753 | 754 | addressAssertHalf(0x20, memPointer++ & 0xFF); //Set low byte # 755 | byteOut(toWrite); //Assert data 756 | digitalWrite(z80WR, 0); //Strobe the write 757 | digitalWrite(z80WR, 1); 758 | dataHiZ(); 759 | digitalWrite(z80RD, 0); //Do read 760 | uint8_t toCheck = byteIn(); 761 | digitalWrite(z80RD, 1); 762 | 763 | if (toCheck != toWrite) { 764 | errors++; 765 | } 766 | 767 | } 768 | 769 | whichFile.close(); 770 | 771 | if (0) { //errors) { 772 | menuText("ERRORS!", &menuMap[5][4]); 773 | displayMenu(8); 774 | whichMenu |= 0x80; 775 | delay(1000); 776 | } 777 | else { 778 | TCCR4A = B10000010; //Fast clock ON; 779 | 780 | startZ80(); 781 | 782 | whichMenu |= 0x80; //Flag to redraw menu next time it pops up 783 | 784 | displayModeChangeTo(showTerminal, 0); 785 | } 786 | 787 | } 788 | 789 | void RAMdump() { 790 | 791 | requestBus(); 792 | 793 | TCCR4A = 0; //Fast clock OFF; 794 | 795 | if (SD.exists("RAMSLOT1.BIN")) { //If file exists erase it and start over 796 | SD.remove("RAMSLOT1.BIN"); 797 | } 798 | 799 | File whichFile = SD.open("RAMSLOT1.BIN", FILE_WRITE); 800 | 801 | Serial.print("Dumping RAM to SD"); 802 | 803 | memoryControl(1); //Take control of memory 804 | dataHiZ(); //Assert bus 805 | addressControl(); 806 | 807 | uint32_t memPointer = 0; 808 | 809 | uint16_t progress = 1024; //One "." every 1024 bytes 810 | uint16_t progressCounter = 0; 811 | 812 | while(memPointer != 65536) { 813 | 814 | if (progressCounter++ == progress) { 815 | progressCounter = 0; 816 | Serial.write('.'); 817 | } 818 | 819 | if (!(memPointer & 0x00FF)) { //Start of page? Assert page #. This reduces I2C access time 820 | addressAssertHalf(0x21, memPointer >> 8); //Set high byte page # 821 | } 822 | 823 | addressAssertHalf(0x20, memPointer & 0xFF); //Set low byte # 824 | digitalWrite(z80RD, 0); //Do read 825 | uint8_t toCheck = byteIn(); 826 | digitalWrite(z80RD, 1); 827 | 828 | whichFile.write(toCheck); //Write to file 829 | 830 | memPointer++; 831 | 832 | } 833 | 834 | whichFile.close(); 835 | 836 | Serial.println("done"); 837 | 838 | TCCR4A = B10000010; //Fast clock ON; 839 | 840 | memoryControl(0); //Release memory controls 841 | dataHiZ(); //Make sure data bus is released 842 | addressRelease(); //Release address bus 843 | digitalWrite(z80BUSREQ, 1); //Release bus request and you're ready to go 844 | 845 | } 846 | 847 | void startZ80() { 848 | 849 | Serial.println("Resetting Z80"); 850 | 851 | memoryControl(0); //Release memory controls 852 | dataHiZ(); //Make sure data bus is released 853 | addressRelease(); //Release address bus 854 | 855 | pinMode(z80Reset, OUTPUT); //Reset 856 | delay(1); 857 | digitalWrite(z80BUSREQ, 1); //Release bus request and you're ready to go 858 | pinMode(z80Reset, INPUT); //Release reset 859 | 860 | } 861 | 862 | void requestBus() { 863 | 864 | Serial.println("Requesting Z80 bus"); 865 | 866 | digitalWrite(z80BUSREQ, 0); //Request bus 867 | 868 | delay(5); 869 | 870 | } 871 | 872 | void memoryControl(uint8_t state) { 873 | 874 | if (state) { //1 = Take control of memory 875 | 876 | digitalWrite(z80WR, 1); 877 | pinMode(z80WR, OUTPUT); 878 | 879 | digitalWrite(z80RD, 1); 880 | pinMode(z80RD, OUTPUT); 881 | 882 | } 883 | else { //0 = release memory 884 | 885 | pinMode(z80WR, INPUT); 886 | pinMode(z80RD, INPUT); 887 | 888 | } 889 | 890 | 891 | } 892 | 893 | void access() { 894 | 895 | TCCR4A = 0; //Fast clock OFF; 896 | 897 | if (PIND & 0x40) { //High? Then it's a read (from us) 898 | //read(); 899 | //dataOut(); 900 | DDRB |= 0xF0; //Set upper nibble as output 901 | DDRF |= 0xF0; //Set lower nibble as output 902 | 903 | PORTB &= 0x0F; //Clear top 4 bits of this port 904 | PORTB |= (ourByte & 0xF0); //OR in top nibble of data 905 | 906 | PORTF &= 0x0F; //Clear top 4 bits of this port 907 | PORTF |= (ourByte << 4); //Shift data 4 to the left then OR in bottom nibble of data 908 | 909 | PORTE |= 0x04; //Wait state 910 | PORTE &= 0xFB; 911 | 912 | PORTE |= 0x04; //T3 state 913 | PORTE &= 0xFB; 914 | 915 | //dataHiZ(); 916 | DDRB &= 0x0F; //Upper nibble of data bus 917 | DDRF &= 0x0F; //Lower nibble of data bus 918 | 919 | DDRF &= ~(1 << 1); //Turn this pin back into an input so IRQ goes high to release it 920 | TCCR4A = B10000010; //Turn fast clock back on 921 | serialFlag = 0; //Clear flag for serial bytes 922 | 923 | } 924 | else { //Else it's a write (to us) 925 | 926 | char RX = (PINB & 0xF0) | (PINF >> 4); //Get the data the Z80 is writing to us 927 | 928 | PORTE |= 0x04; //Wait state 929 | PORTE &= 0xFB; 930 | 931 | PORTE |= 0x04; //T3 state 932 | PORTE &= 0xFB; 933 | 934 | TCCR4A = B10000010; //Turn fast clock back on 935 | 936 | charPrint(RX); //Chars to OLED and also control command interpreter 937 | Serial.write(RX); //Send data along as USB serial 938 | 939 | } 940 | 941 | } 942 | 943 | void charPrint(uint8_t theChar) { 944 | 945 | if (cursorStatus) { 946 | tileMap[cursorX][cursorY] = 0; //Erase cursor current position 947 | blink = 14; //Set this so cursor appears on next line immediately 948 | } 949 | 950 | /* 951 | 952 | if (opCode) { //Collecting bytes of payload for the opcode? 953 | payLoad[payLoadPointer] = theChar; //Copy the byte into buffer 954 | if (++payLoadPointer == payLoadSize[opCode]) { //Did we collect 'em all? Execute payload 955 | execOpCode(opCode); //Execute 956 | opCode = 0; //Clear opcode 957 | return; //Exit function 958 | } 959 | } 960 | 961 | */ 962 | 963 | if (theChar < 31) { //Did we get an opcode byte and not currently loading payload bytes? 964 | if (payLoadSize[theChar] == 0) { //No payload bytes required? 965 | execOpCode(theChar); //Execute immediately 966 | return; //Exit function 967 | } 968 | else { //Payload bytes required? 969 | opCode = theChar; //Set opCode loading flag 970 | payLoadPointer = 0; //Reset the buffer pointer 971 | return; //Exit function 972 | } 973 | 974 | } 975 | 976 | //If not opcode or payload then it's just normal text data. Print in on the OLED 977 | 978 | tileMap[cursorX][cursorY] = theChar - charSetOffset; 979 | 980 | if (++cursorX == columns) { 981 | cursorX = 0; 982 | advanceLine(); 983 | } 984 | 985 | } 986 | 987 | void advanceLine() { //Advance the Y cursor and see if we need to scroll 988 | 989 | if (++cursorY > 7) { 990 | cursorY = 0; 991 | } 992 | 993 | if (cursorY == winY) { 994 | for (int x = 0 ; x < 32 ; x++) { 995 | tileMap[x][winY] = 0; 996 | } 997 | if (++winY == rows) { //Did we reach the end of the buffer? 998 | winY = 0; //Reset back to beginning 999 | } 1000 | } 1001 | 1002 | } 1003 | 1004 | void execOpCode(uint8_t whichOpCode) { //When all payload bytes have been collected vector here to execute the opcode 1005 | 1006 | switch(whichOpCode) { 1007 | 1008 | case 1: //Set terminal display width 1009 | 1010 | break; 1011 | 1012 | case 8: //Backspace 1013 | if (cursorX > 0) { 1014 | cursorX--; 1015 | } 1016 | case 10: //New line (basically ignore, but eat the byte) 1017 | 1018 | break; 1019 | case 12: //Clear screen 1020 | memset(&tileMap, 0, 256); 1021 | cursorX = 0; 1022 | cursorY = 0; 1023 | winY = 0; 1024 | break; 1025 | case 13: //Carriage return (use this to start new line, better terminal compatibility) 1026 | cursorX = 0; 1027 | advanceLine(); 1028 | break; 1029 | case 7: //CTRL-G = RAM dump to disk 1030 | rebootFlag = 2; 1031 | break; 1032 | case 18: //CNTRL-R = reboot 1033 | rebootFlag = 1; 1034 | break; 1035 | 1036 | } 1037 | 1038 | } 1039 | 1040 | void waitKey() { 1041 | 1042 | while(Serial.available() == 0) { 1043 | delay(1); 1044 | } 1045 | 1046 | while(Serial.available()) { 1047 | Serial.read(); 1048 | } 1049 | 1050 | } 1051 | 1052 | void byteOut(uint8_t theData) { 1053 | 1054 | PORTB &= 0x0F; //Clear top 4 bits of this port 1055 | PORTB |= (theData & 0xF0); //OR in top nibble of data 1056 | 1057 | PORTF &= 0x0F; //Clear top 4 bits of this port 1058 | PORTF |= (theData << 4); //Shift data 4 to the left then OR in bottom nibble of data 1059 | 1060 | } 1061 | 1062 | uint8_t byteIn() { 1063 | 1064 | return (PINB & 0xF0) | (PINF >> 4); 1065 | 1066 | } 1067 | 1068 | void dataHiZ() { //Allows us to either read data or not affect the bus 1069 | 1070 | DDRB &= 0x0F; //Upper nibble of data bus 1071 | DDRF &= 0x0F; //Lower nibble of data bus 1072 | 1073 | } 1074 | 1075 | void dataOut() { //Allows us to assert the data bus 1076 | 1077 | DDRB |= 0xF0; //Set upper nibble as output 1078 | DDRF |= 0xF0; //Set lower nibble as output 1079 | 1080 | } 1081 | 1082 | void text(const char *str) { 1083 | 1084 | while (*str) { 1085 | charPrint(*str++); 1086 | } 1087 | 1088 | } 1089 | 1090 | void menuText(const char *str, uint8_t *menuMemPoint) { 1091 | 1092 | while (*str) { 1093 | *menuMemPoint++ = *str++; 1094 | } 1095 | 1096 | } 1097 | 1098 | void textln(const char *str) { 1099 | 1100 | while (*str) { 1101 | charPrint(*str++); 1102 | } 1103 | 1104 | charPrint(13); //Do carriage return 1105 | 1106 | } 1107 | 1108 | void displayMenu(uint8_t showRows) { 1109 | 1110 | if (animation++ == 7) { 1111 | menuMap[0][1] = 171; 1112 | menuMap[1][1] = 187; 1113 | menuMap[0][12] = 173; 1114 | menuMap[1][12] = 189; 1115 | } 1116 | 1117 | if (animation == 14) { 1118 | animation = 0; 1119 | menuMap[0][1] = 172; 1120 | menuMap[1][1] = 188; 1121 | menuMap[0][12] = 174; 1122 | menuMap[1][12] = 190; 1123 | } 1124 | 1125 | uint16_t courseY = 0; //Get the course Y value for top line of visible screen 1126 | 1127 | uint8_t thisTile; 1128 | 1129 | for (uint8_t row = 0 ; row < showRows ; row++) { //Draw the requested number of rows 1130 | 1131 | uint8_t courseX = 0; //Find the current coarseX position for this line 1132 | 1133 | for (uint8_t colB = 0 ; colB < 8 ; colB++) { //Draw 8 groups of 2 characters across each line (16 char wide) 1134 | 1135 | Wire.beginTransmission(_i2caddr); //Send chars in groups of 2 (16 bytes per transmission) 1136 | Wire.write(0x40); 1137 | 1138 | thisTile = menuMap[courseY][courseX++]; //Get the tile value 1139 | 1140 | for (uint8_t col = 0 ; col < 8 ; col++) { //Send the 8 horizontal lines to the OLED 1141 | Wire.write(pgm_read_byte_near(font8x8 + (thisTile << 3) + col)); 1142 | } 1143 | 1144 | thisTile = menuMap[courseY][courseX++]; //Get the tile value 1145 | 1146 | for (uint8_t col = 0 ; col < 8 ; col++) { //Send the 8 horizontal lines to the OLED 1147 | Wire.write(pgm_read_byte_near(font8x8 + (thisTile << 3) + col)); 1148 | } 1149 | 1150 | Wire.endTransmission(); 1151 | 1152 | } 1153 | 1154 | courseY++; //Increment coarse pointer to next row 1155 | 1156 | } 1157 | 1158 | } 1159 | 1160 | void display4x8(uint8_t showRows) { 1161 | 1162 | uint16_t courseY = winY; //Get the course Y value for top line of visible screen 1163 | 1164 | uint8_t thisTile; 1165 | 1166 | for (uint8_t row = 0 ; row < showRows ; row++) { //Draw the requested number of rows 1167 | 1168 | uint8_t courseX = 0; //Find the current coarseX position for this line 1169 | 1170 | for (uint8_t colB = 0 ; colB < 8 ; colB++) { 1171 | 1172 | Wire.beginTransmission(_i2caddr); //Send chars in groups of 2 (16 bytes per transmission) 1173 | Wire.write(0x40); 1174 | 1175 | thisTile = tileMap[courseX++][courseY]; //Get the tile value 1176 | 1177 | for (uint8_t col = 0 ; col < 4 ; col++) { //Send the 4 horizontal lines to the OLED 1178 | Wire.write(pgm_read_byte_near(font4x8 + (thisTile << 2) + col)); 1179 | } 1180 | 1181 | thisTile = tileMap[courseX++][courseY]; //Get the tile value 1182 | 1183 | for (uint8_t col = 0 ; col < 4 ; col++) { //Send the 4 horizontal lines to the OLED 1184 | Wire.write(pgm_read_byte_near(font4x8 + (thisTile << 2) + col)); 1185 | } 1186 | 1187 | thisTile = tileMap[courseX++][courseY]; //Get the tile value 1188 | 1189 | for (uint8_t col = 0 ; col < 4 ; col++) { //Send the 4 horizontal lines to the OLED 1190 | Wire.write(pgm_read_byte_near(font4x8 + (thisTile << 2) + col)); 1191 | } 1192 | 1193 | thisTile = tileMap[courseX++][courseY]; //Get the tile value 1194 | 1195 | for (uint8_t col = 0 ; col < 4 ; col++) { //Send the 4 horizontal lines to the OLED 1196 | Wire.write(pgm_read_byte_near(font4x8 + (thisTile << 2) + col)); 1197 | } 1198 | 1199 | Wire.endTransmission(); 1200 | 1201 | } 1202 | 1203 | if (++courseY > 7) { 1204 | courseY = 0; 1205 | } 1206 | 1207 | } 1208 | 1209 | } 1210 | 1211 | void addressAssertHalf(uint8_t theDevice, uint8_t theAddress) { //Puts an address on the IO expanders and controls the bus 1212 | 1213 | Wire.beginTransmission(theDevice); //Low byte IO 1214 | Wire.write(0x01); //Select output register 1215 | Wire.write(theAddress); //Assert byte 1216 | Wire.endTransmission(); 1217 | 1218 | } 1219 | 1220 | uint8_t getButtons() { 1221 | 1222 | Wire.beginTransmission(0x22); //Control IO 1223 | Wire.write(0x00); //Select read register 1224 | Wire.endTransmission(); 1225 | 1226 | Wire.requestFrom(0x22, 1); // request 1 byte from device 0x22 1227 | 1228 | return ~(Wire.read()); // receive a byte as character and return the inverse of it 1229 | 1230 | } 1231 | 1232 | void addressControl() { 1233 | 1234 | Wire.beginTransmission(0x20); //Low byte IO 1235 | Wire.write(0x03); //Config register 1236 | Wire.write(0x00); //Config as OUTPUT 1237 | Wire.endTransmission(); 1238 | 1239 | Wire.beginTransmission(0x21); //Highbyte IO 1240 | Wire.write(0x03); //Config register 1241 | Wire.write(0x00); //Config as OUTPUT 1242 | Wire.endTransmission(); 1243 | 1244 | } 1245 | 1246 | void addressRelease() { 1247 | 1248 | Wire.beginTransmission(0x20); //Low byte IO 1249 | Wire.write(0x03); //Config register 1250 | Wire.write(0xFF); //Config as INPUT 1251 | Wire.endTransmission(); 1252 | 1253 | Wire.beginTransmission(0x21); //High byte IO 1254 | Wire.write(0x03); //Config register 1255 | Wire.write(0xFF); //Config as INPUT 1256 | Wire.endTransmission(); 1257 | 1258 | } 1259 | 1260 | void OLEDbegin(uint8_t vccstate, uint8_t i2caddr) { 1261 | 1262 | _vccstate = vccstate; 1263 | _i2caddr = i2caddr; 1264 | 1265 | // Init sequence 1266 | ssd1306_command(SSD1306_DISPLAYOFF); // 0xAE 1267 | ssd1306_command(SSD1306_SETDISPLAYCLOCKDIV); // 0xD5 1268 | ssd1306_command(0x80); // the suggested ratio 0x80 1269 | 1270 | ssd1306_command(SSD1306_SETMULTIPLEX); // 0xA8 1271 | ssd1306_command(SSD1306_LCDHEIGHT - 1); 1272 | 1273 | ssd1306_command(SSD1306_SETDISPLAYOFFSET); // 0xD3 1274 | ssd1306_command(0x0); // no offset 1275 | ssd1306_command(SSD1306_SETSTARTLINE | 0x0); // line #0 1276 | ssd1306_command(SSD1306_CHARGEPUMP); // 0x8D 1277 | if (vccstate == SSD1306_EXTERNALVCC) 1278 | { ssd1306_command(0x10); } 1279 | else 1280 | { ssd1306_command(0x14); } 1281 | ssd1306_command(SSD1306_MEMORYMODE); // 0x20 1282 | ssd1306_command(0x00); // 0x0 act like ks0108 1283 | ssd1306_command(SSD1306_SEGREMAP | 0x1); 1284 | ssd1306_command(SSD1306_COMSCANDEC); 1285 | 1286 | ssd1306_command(SSD1306_SETCOMPINS); // 0xDA 1287 | ssd1306_command(0x12); 1288 | ssd1306_command(SSD1306_SETCONTRAST); // 0x81 1289 | if (vccstate == SSD1306_EXTERNALVCC) 1290 | { ssd1306_command(0x9F); } 1291 | else 1292 | { ssd1306_command(0xCF); } 1293 | 1294 | 1295 | ssd1306_command(SSD1306_SETPRECHARGE); // 0xd9 1296 | if (vccstate == SSD1306_EXTERNALVCC) 1297 | { ssd1306_command(0x22); } 1298 | else 1299 | { ssd1306_command(0xF1); } 1300 | ssd1306_command(SSD1306_SETVCOMDETECT); // 0xDB 1301 | ssd1306_command(0x40); 1302 | ssd1306_command(SSD1306_DISPLAYALLON_RESUME); // 0xA4 1303 | ssd1306_command(SSD1306_NORMALDISPLAY); // 0xA6 1304 | 1305 | ssd1306_command(SSD1306_DEACTIVATE_SCROLL); 1306 | 1307 | ssd1306_command(SSD1306_DISPLAYON);//--turn on oled panel 1308 | 1309 | ssd1306_command(SSD1306_COLUMNADDR); 1310 | ssd1306_command(0); // Column start address (0 = reset) 1311 | ssd1306_command(SSD1306_LCDWIDTH-1); // Column end address (127 = reset) 1312 | 1313 | ssd1306_command(SSD1306_PAGEADDR); 1314 | ssd1306_command(0); // Page start address (0 = reset) 1315 | 1316 | ssd1306_command(7); // Page end address 1317 | 1318 | 1319 | 1320 | } 1321 | 1322 | void ssd1306_command(uint8_t c) { 1323 | 1324 | Wire.beginTransmission(_i2caddr); 1325 | Wire.write(0x00); 1326 | Wire.write(c); 1327 | Wire.endTransmission(); 1328 | 1329 | } 1330 | -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_02/defines.h: -------------------------------------------------------------------------------- 1 | #define BLACK 0 2 | #define WHITE 1 3 | #define INVERSE 2 4 | 5 | #define SSD1306_I2C_ADDRESS 0x3C // 011110+SA0+RW - 0x3C or 0x3D 6 | 7 | #define SSD1306_LCDWIDTH 128 8 | #define SSD1306_LCDHEIGHT 64 9 | 10 | #define SSD1306_SETCONTRAST 0x81 11 | #define SSD1306_DISPLAYALLON_RESUME 0xA4 12 | #define SSD1306_DISPLAYALLON 0xA5 13 | #define SSD1306_NORMALDISPLAY 0xA6 14 | #define SSD1306_INVERTDISPLAY 0xA7 15 | #define SSD1306_DISPLAYOFF 0xAE 16 | #define SSD1306_DISPLAYON 0xAF 17 | 18 | #define SSD1306_SETDISPLAYOFFSET 0xD3 19 | #define SSD1306_SETCOMPINS 0xDA 20 | 21 | #define SSD1306_SETVCOMDETECT 0xDB 22 | 23 | #define SSD1306_SETDISPLAYCLOCKDIV 0xD5 24 | #define SSD1306_SETPRECHARGE 0xD9 25 | 26 | #define SSD1306_SETMULTIPLEX 0xA8 27 | 28 | #define SSD1306_SETLOWCOLUMN 0x00 29 | #define SSD1306_SETHIGHCOLUMN 0x10 30 | 31 | #define SSD1306_SETSTARTLINE 0x40 32 | 33 | #define SSD1306_MEMORYMODE 0x20 34 | #define SSD1306_COLUMNADDR 0x21 35 | #define SSD1306_PAGEADDR 0x22 36 | 37 | #define SSD1306_COMSCANINC 0xC0 38 | #define SSD1306_COMSCANDEC 0xC8 39 | 40 | #define SSD1306_SEGREMAP 0xA0 41 | 42 | #define SSD1306_CHARGEPUMP 0x8D 43 | 44 | #define SSD1306_EXTERNALVCC 0x1 45 | #define SSD1306_SWITCHCAPVCC 0x2 46 | 47 | // Scrolling #defines 48 | #define SSD1306_ACTIVATE_SCROLL 0x2F 49 | #define SSD1306_DEACTIVATE_SCROLL 0x2E 50 | #define SSD1306_SET_VERTICAL_SCROLL_AREA 0xA3 51 | #define SSD1306_RIGHT_HORIZONTAL_SCROLL 0x26 52 | #define SSD1306_LEFT_HORIZONTAL_SCROLL 0x27 53 | #define SSD1306_VERTICAL_AND_RIGHT_HORIZONTAL_SCROLL 0x29 54 | #define SSD1306_VERTICAL_AND_LEFT_HORIZONTAL_SCROLL 0x2A 55 | 56 | uint8_t opCode = 0; //When a command code comes in we copy it to this. Then we collect X payload bytes and execute command 57 | uint8_t payLoadPointer = 0; //What buffer position we are writing payload bytes to 58 | uint8_t payLoad[4]; //Buffer to store command payload bytes as they stream in 59 | 60 | uint8_t payLoadSize[] = {0, 1, 0, 0, 0, 0, 0, 0, 61 | 0, 0, 0, 0, 0, 0, 0, 0, 62 | 0, 0, 0, 0, 0, 0, 0, 0, 63 | 0, 0, 0, 0, 0, 0, 0, 1}; 64 | 65 | const uint8_t font8x8[] PROGMEM = { //The 8x8 text font with extended graphics and a set of tall letters 66 | 67 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x38, 0x07, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xc1, 0x79, 0xbf, 0xdd, 0xed, 0xf5, 0xf9, 0x3f, 0xc7, 0xd9, 0x1d, 0xc5, 0xf9, 0x3f, 0xc7, 0xf9, 0x3d, 0xc5, 0xf9, 0x3f, 0x07, 0xe0, 0x9c, 0x83, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xe0, 0xfc, 0x8f, 0xf4, 0x8d, 0xfd, 0xcd, 0xb7, 0xcf, 0xfc, 0xed, 0x85, 0xec, 0xff, 0xcf, 0x94, 0xad, 0xfd, 0xfc, 0x1f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0x5e, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x0e, 0x00, 0x00, 0x0e, 0x0e, 0x00, 0x24, 0x7e, 0x7e, 0x24, 0x24, 0x7e, 0x7e, 0x24, 0x00, 0x24, 0x2e, 0x6b, 0x6b, 0x3a, 0x12, 0x00, 0x00, 0x66, 0x36, 0x18, 0x0c, 0x66, 0x62, 0x00, 0x00, 0x30, 0x7a, 0x4f, 0x5d, 0x37, 0x72, 0x50, 0x00, 0x10, 0x0c, 0x0c, 0x06, 0x0c, 0x0c, 0x10, 0x00, 0x00, 0x00, 0x3c, 0x7e, 0x66, 0x42, 0x00, 0x00, 0x00, 0x42, 0x66, 0x7e, 0x3c, 0x00, 0x00, 0x08, 0x2a, 0x3e, 0x1c, 0x1c, 0x3e, 0x2a, 0x08, 0x00, 0x08, 0x08, 0x3e, 0x3e, 0x08, 0x08, 0x00, 0x00, 0x00, 0x80, 0xe0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x02, 0x00, 0x00, 0x3c, 0x7e, 0x52, 0x4a, 0x7e, 0x3c, 0x00, 0x00, 0x40, 0x44, 0x7e, 0x7e, 0x40, 0x40, 0x00, 0x00, 0x44, 0x66, 0x72, 0x5a, 0x4e, 0x44, 0x00, 0x00, 0x22, 0x62, 0x4a, 0x5e, 0x76, 0x22, 0x00, 0x00, 0x30, 0x38, 0x2c, 0x7e, 0x7e, 0x20, 0x00, 0x00, 0x2e, 0x6e, 0x4a, 0x4a, 0x7a, 0x32, 0x00, 0x00, 0x3c, 0x7e, 0x4a, 0x4a, 0x7a, 0x30, 0x00, 0x00, 0x02, 0x62, 0x72, 0x1a, 0x0e, 0x06, 0x00, 0x00, 0x34, 0x7e, 0x4a, 0x4a, 0x7e, 0x34, 0x00, 0x00, 0x04, 0x4e, 0x4a, 0x6a, 0x3e, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xec, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1c, 0x3e, 0x7f, 0x00, 0x00, 0x00, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x00, 0x7f, 0x3e, 0x1c, 0x08, 0x00, 0x00, 0x00, 0x04, 0x06, 0x52, 0x5a, 0x0e, 0x04, 0x00, 0x00, 0x3c, 0x7e, 0x42, 0x5a, 0x5e, 0x5c, 0x00, 0x00, 0x78, 0x7c, 0x26, 0x26, 0x7c, 0x78, 0x00, 0x00, 0x7e, 0x7e, 0x4a, 0x4a, 0x7e, 0x34, 0x00, 0x00, 0x3c, 0x7e, 0x42, 0x42, 0x66, 0x24, 0x00, 0x00, 0x7e, 0x7e, 0x42, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x7e, 0x7e, 0x4a, 0x4a, 0x4a, 0x42, 0x00, 0x00, 0x7e, 0x7e, 0x0a, 0x0a, 0x0a, 0x02, 0x00, 0x00, 0x3c, 0x7e, 0x42, 0x52, 0x72, 0x72, 0x00, 0x00, 0x7e, 0x7e, 0x08, 0x08, 0x7e, 0x7e, 0x00, 0x00, 0x42, 0x42, 0x7e, 0x7e, 0x42, 0x42, 0x00, 0x00, 0x20, 0x60, 0x40, 0x42, 0x7e, 0x3e, 0x00, 0x00, 0x7e, 0x7e, 0x18, 0x3c, 0x66, 0x42, 0x00, 0x00, 0x7e, 0x7e, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x7e, 0x7e, 0x0c, 0x18, 0x0c, 0x7e, 0x7e, 0x00, 0x7e, 0x7e, 0x1c, 0x38, 0x7e, 0x7e, 0x00, 0x00, 0x3c, 0x7e, 0x42, 0x42, 0x7e, 0x3c, 0x00, 0x00, 0x7e, 0x7e, 0x12, 0x12, 0x1e, 0x0c, 0x00, 0x00, 0x3c, 0x7e, 0x42, 0x22, 0x7e, 0x5c, 0x00, 0x00, 0x7e, 0x7e, 0x12, 0x32, 0x7e, 0x4c, 0x00, 0x00, 0x04, 0x4e, 0x4a, 0x4a, 0x7a, 0x30, 0x00, 0x00, 0x02, 0x02, 0x7e, 0x7e, 0x02, 0x02, 0x00, 0x00, 0x7e, 0x7e, 0x40, 0x40, 0x7e, 0x7e, 0x00, 0x00, 0x1e, 0x3e, 0x60, 0x60, 0x3e, 0x1e, 0x00, 0x00, 0x7e, 0x7e, 0x30, 0x18, 0x30, 0x7e, 0x7e, 0x00, 0x66, 0x7e, 0x18, 0x18, 0x7e, 0x66, 0x00, 0x00, 0x06, 0x0e, 0x78, 0x78, 0x0e, 0x06, 0x00, 0x00, 0x62, 0x72, 0x5a, 0x4e, 0x46, 0x42, 0x00, 0x00, 0x08, 0x1c, 0x3e, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x40, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x3e, 0x1c, 0x08, 0x00, 0x7c, 0x5e, 0x5e, 0x5c, 0x5c, 0x5c, 0x44, 0x7c, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x74, 0x54, 0x54, 0x7c, 0x78, 0x00, 0x00, 0x7e, 0x7e, 0x48, 0x48, 0x78, 0x30, 0x00, 0x00, 0x38, 0x7c, 0x44, 0x44, 0x44, 0x00, 0x00, 0x00, 0x30, 0x78, 0x48, 0x48, 0x7e, 0x7e, 0x00, 0x00, 0x38, 0x7c, 0x54, 0x54, 0x5c, 0x18, 0x00, 0x00, 0x00, 0x08, 0x7c, 0x7e, 0x0a, 0x0a, 0x00, 0x00, 0x98, 0xbc, 0xa4, 0xa4, 0xfc, 0x7c, 0x00, 0x00, 0x7e, 0x7e, 0x08, 0x08, 0x78, 0x70, 0x00, 0x00, 0x00, 0x48, 0x7a, 0x7a, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0xfa, 0x7a, 0x00, 0x00, 0x7e, 0x7e, 0x10, 0x38, 0x68, 0x40, 0x00, 0x00, 0x00, 0x42, 0x7e, 0x7e, 0x40, 0x00, 0x00, 0x00, 0x7c, 0x18, 0x18, 0x38, 0x1c, 0x1c, 0x78, 0x00, 0x7c, 0x7c, 0x04, 0x04, 0x7c, 0x78, 0x00, 0x00, 0x38, 0x7c, 0x44, 0x44, 0x7c, 0x38, 0x00, 0x00, 0xfc, 0xfc, 0x24, 0x24, 0x3c, 0x18, 0x00, 0x00, 0x18, 0x3c, 0x24, 0x24, 0xfc, 0xfc, 0x00, 0x00, 0x7c, 0x7c, 0x04, 0x04, 0x0c, 0x08, 0x00, 0x00, 0x48, 0x5c, 0x54, 0x54, 0x74, 0x24, 0x00, 0x00, 0x04, 0x04, 0x3e, 0x7e, 0x44, 0x44, 0x00, 0x00, 0x3c, 0x7c, 0x40, 0x40, 0x7c, 0x7c, 0x00, 0x00, 0x1c, 0x3c, 0x60, 0x60, 0x3c, 0x1c, 0x00, 0x00, 0x1c, 0x7c, 0x70, 0x38, 0x70, 0x7c, 0x1c, 0x00, 0x44, 0x6c, 0x38, 0x38, 0x6c, 0x44, 0x00, 0x00, 0x9c, 0xbc, 0xa0, 0xe0, 0x7c, 0x3c, 0x00, 0x00, 0x44, 0x64, 0x74, 0x5c, 0x4c, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xc1, 0xf1, 0x3d, 0x3d, 0xf1, 0xc1, 0x01, 0x01, 0xfd, 0xfd, 0xcd, 0xcd, 0x79, 0x31, 0x01, 0x01, 0xf1, 0xf9, 0x0d, 0x0d, 0x39, 0x31, 0x01, 0x01, 0xfd, 0xfd, 0x0d, 0x39, 0xf1, 0xc1, 0x01, 0x01, 0xfd, 0xfd, 0xcd, 0xcd, 0xcd, 0x0d, 0x01, 0x01, 0xfd, 0xfd, 0xcd, 0xcd, 0xcd, 0x0d, 0x01, 0x01, 0xf1, 0xf9, 0x0d, 0x0d, 0x0d, 0x0d, 0x01, 0x01, 0xfd, 0xfd, 0xc1, 0xc1, 0xfd, 0xfd, 0x01, 0x01, 0x0d, 0x0d, 0xfd, 0xfd, 0x0d, 0x0d, 0x01, 0x01, 0x01, 0x01, 0x0d, 0x0d, 0xfd, 0xfd, 0x01, 0x01, 0xfd, 0xfd, 0xc1, 0xf1, 0x3d, 0x0d, 0x01, 0x01, 0xfd, 0xfd, 0x01, 0x01, 0x01, 0x01, 0x01, 0xf9, 0xfd, 0xf1, 0xc1, 0xf1, 0xfd, 0xf9, 0x01, 0x01, 0xfd, 0xfd, 0xf1, 0xc1, 0xfd, 0xfd, 0x01, 0x01, 0xf1, 0xf9, 0x0d, 0x0d, 0xf9, 0xf1, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xbf, 0xbf, 0x8c, 0x8c, 0xbf, 0xbf, 0x80, 0x80, 0xbf, 0xbf, 0xb0, 0xb0, 0x9f, 0x8e, 0x80, 0x80, 0x8f, 0x9f, 0xb0, 0xb0, 0x9c, 0x8c, 0x80, 0x80, 0xbf, 0xbf, 0xb0, 0x9c, 0x8f, 0x83, 0x80, 0x80, 0xbf, 0xbf, 0xb0, 0xb0, 0xb0, 0xb0, 0x80, 0x80, 0xbf, 0xbf, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x8f, 0x9f, 0xb0, 0xb0, 0xb3, 0x9f, 0x8e, 0x80, 0xbf, 0xbf, 0x80, 0x80, 0xbf, 0xbf, 0x80, 0x80, 0xb0, 0xb0, 0xbf, 0xbf, 0xb0, 0xb0, 0x80, 0x80, 0x8c, 0x98, 0xb0, 0xb0, 0x9f, 0x8f, 0x80, 0x80, 0xbf, 0xbf, 0x83, 0x8f, 0xbc, 0xb0, 0x80, 0x80, 0xbf, 0xbf, 0xb0, 0xb0, 0xb0, 0xb0, 0x80, 0xbf, 0xbf, 0x80, 0x83, 0x80, 0xbf, 0xbf, 0x80, 0x80, 0xbf, 0xbf, 0x83, 0x8f, 0xbf, 0xbf, 0x80, 0x80, 0x8f, 0x9f, 0xb0, 0xb0, 0x9f, 0x8f, 0x80, 0x01, 0x01, 0xfd, 0xfd, 0x0d, 0x0d, 0xf9, 0xf1, 0x01, 0x01, 0xf1, 0xf9, 0x0d, 0x0d, 0xf9, 0xf1, 0x01, 0x01, 0xfd, 0xfd, 0x0d, 0x0d, 0xf9, 0x71, 0x01, 0x01, 0x31, 0x79, 0xcd, 0xcd, 0x8d, 0x05, 0x01, 0x01, 0x0d, 0x0d, 0xfd, 0xfd, 0x0d, 0x0d, 0x01, 0x01, 0xf9, 0xfd, 0x01, 0x01, 0xfd, 0xf9, 0x01, 0x01, 0xf9, 0xfd, 0x01, 0x01, 0xfd, 0xf9, 0x01, 0x01, 0xf9, 0xfd, 0x01, 0xc1, 0x01, 0xfd, 0xf9, 0x01, 0x3d, 0xfd, 0xc1, 0xc1, 0xfd, 0x3d, 0x01, 0x01, 0x3d, 0x7d, 0xc1, 0xc1, 0x7d, 0x3d, 0x01, 0x01, 0x09, 0x8d, 0xcd, 0xed, 0x7d, 0x3d, 0x81, 0xc1, 0xe1, 0xf1, 0xf9, 0xfd, 0x01, 0x01, 0x01, 0x01, 0x81, 0xc1, 0xe1, 0xf1, 0xf9, 0xfd, 0x01, 0x01, 0xfd, 0xf9, 0xf1, 0xe1, 0xc1, 0x81, 0xfd, 0xf9, 0xf1, 0xe1, 0xc1, 0x81, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x80, 0xbf, 0xbf, 0x83, 0x83, 0x81, 0x80, 0x80, 0x80, 0x8f, 0x9f, 0xb0, 0x8c, 0xbf, 0xb3, 0x80, 0x80, 0xbf, 0xbf, 0x83, 0x8f, 0xbd, 0xb0, 0x80, 0x80, 0xa0, 0xb0, 0xb0, 0xb0, 0x9f, 0x8f, 0x80, 0x80, 0x80, 0x80, 0xbf, 0xbf, 0x80, 0x80, 0x80, 0x80, 0x9f, 0xbf, 0xb0, 0xb0, 0xbf, 0x9f, 0x80, 0x80, 0x83, 0x8f, 0xbc, 0xbc, 0x8f, 0x83, 0x80, 0x80, 0xbf, 0xbf, 0x8f, 0x83, 0x8f, 0xbf, 0xbf, 0x80, 0xbc, 0xbf, 0x83, 0x83, 0xbf, 0xbc, 0x80, 0x80, 0x80, 0x80, 0xbf, 0xbf, 0x80, 0x80, 0x80, 0x80, 0xbc, 0xbf, 0xb3, 0xb1, 0xb0, 0x90, 0x80, 0x81, 0x83, 0x87, 0x8f, 0x9f, 0xbf, 0x80, 0x80, 0x80, 0x80, 0x81, 0x83, 0x87, 0x8f, 0x9f, 0xbf, 0x80, 0x80, 0xbf, 0x9f, 0x8f, 0x87, 0x83, 0x81, 0xbf, 0x9f, 0x8f, 0x87, 0x83, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 68 | 69 | }; 70 | 71 | const uint8_t font4x8[] PROGMEM = { //The 4x8 text font 72 | 73 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x7e, 0x24, 0x7e, 0x00, 0x24, 0xcb, 0x34, 0x00, 0x62, 0x18, 0x46, 0x00, 0x3a, 0x65, 0x5a, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x00, 0x42, 0x3c, 0x00, 0x00, 0x2a, 0x1c, 0x2a, 0x00, 0x08, 0x3e, 0x08, 0x00, 0x80, 0x60, 0x00, 0x00, 0x08, 0x08, 0x08, 0x00, 0x00, 0x60, 0x00, 0x00, 0x60, 0x18, 0x06, 0x00, 0x3c, 0x4a, 0x3c, 0x00, 0x44, 0x7e, 0x40, 0x00, 0x64, 0x52, 0x4c, 0x00, 0x22, 0x4a, 0x36, 0x00, 0x18, 0x14, 0x7e, 0x00, 0x2e, 0x4a, 0x32, 0x00, 0x3c, 0x4a, 0x32, 0x00, 0x02, 0x72, 0x0e, 0x00, 0x34, 0x4a, 0x34, 0x00, 0x4c, 0x52, 0x3c, 0x00, 0x00, 0x24, 0x00, 0x00, 0x40, 0x24, 0x00, 0x00, 0x10, 0x28, 0x44, 0x00, 0x14, 0x14, 0x14, 0x00, 0x44, 0x28, 0x10, 0x00, 0x04, 0x52, 0x0c, 0x00, 0x3c, 0x42, 0x4c, 0x00, 0x7c, 0x12, 0x7c, 0x00, 0x7e, 0x4a, 0x34, 0x00, 0x3c, 0x42, 0x24, 0x00, 0x7e, 0x42, 0x3c, 0x00, 0x7e, 0x4a, 0x4a, 0x00, 0x7e, 0x0a, 0x0a, 0x00, 0x3c, 0x42, 0x34, 0x00, 0x7e, 0x08, 0x7e, 0x00, 0x42, 0x7e, 0x42, 0x00, 0x20, 0x40, 0x3e, 0x00, 0x7e, 0x08, 0x76, 0x00, 0x7e, 0x40, 0x40, 0x00, 0x7e, 0x04, 0x7e, 0x00, 0x7c, 0x18, 0x3e, 0x00, 0x3c, 0x42, 0x3c, 0x00, 0x7e, 0x12, 0x0c, 0x00, 0x3c, 0x62, 0x5c, 0x00, 0x7e, 0x12, 0x6c, 0x00, 0x24, 0x4a, 0x34, 0x00, 0x02, 0x7e, 0x02, 0x00, 0x7e, 0x40, 0x7e, 0x00, 0x3e, 0x40, 0x3e, 0x00, 0x7e, 0x20, 0x7e, 0x00, 0x76, 0x08, 0x76, 0x00, 0x06, 0x78, 0x06, 0x00, 0x62, 0x5a, 0x46, 0x00, 0x00, 0x7e, 0x42, 0x00, 0x06, 0x18, 0x60, 0x00, 0x42, 0x7e, 0x00, 0x00, 0x04, 0x02, 0x04, 0x00, 0x80, 0x80, 0x80, 0x80, 0x02, 0x04, 0x00, 0x00, 0x24, 0x54, 0x78, 0x00, 0x7e, 0x48, 0x30, 0x00, 0x38, 0x44, 0x44, 0x00, 0x30, 0x48, 0x7e, 0x00, 0x38, 0x54, 0x58, 0x00, 0x08, 0x7c, 0x0a, 0x00, 0x98, 0xa4, 0x7c, 0x00, 0x7e, 0x08, 0x70, 0x00, 0x48, 0x7a, 0x40, 0x00, 0x80, 0x88, 0x7a, 0x00, 0x7e, 0x10, 0x68, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7c, 0x08, 0x7c, 0x00, 0x7c, 0x04, 0x78, 0x00, 0x38, 0x44, 0x38, 0x00, 0xfc, 0x24, 0x18, 0x00, 0x18, 0x24, 0xfc, 0x00, 0x78, 0x04, 0x04, 0x00, 0x48, 0x54, 0x24, 0x00, 0x08, 0x7e, 0x08, 0x00, 0x7c, 0x40, 0x7c, 0x00, 0x3c, 0x40, 0x3c, 0x00, 0x7c, 0x20, 0x7c, 0x00, 0x6c, 0x10, 0x6c, 0x00, 0x9c, 0xa0, 0x7c, 0x00, 0x64, 0x54, 0x4c, 0x00, 0x08, 0x36, 0x41, 0x00, 0x00, 0x77, 0x00, 0x00, 0x41, 0x36, 0x08, 0x00, 0x04, 0x0c, 0x08, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 74 | 75 | }; 76 | -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_02/graphics/Menu Header Condensed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_02/graphics/Menu Header Condensed.png -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_02/graphics/Menu Header Condensed.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_02/graphics/Menu Header Condensed.psd -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_02/graphics/Menu header.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_02/graphics/Menu header.psd -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_02/graphics/Tall Font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_02/graphics/Tall Font.png -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_02/graphics/Tall Font.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_02/graphics/Tall Font.psd -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_02/graphics/atari font 4x8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_02/graphics/atari font 4x8.png -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_02/graphics/atari font 4x8.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_02/graphics/atari font 4x8.psd -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_02/graphics/atari font 8x8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_02/graphics/atari font 8x8.png -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_02/graphics/atari font 8x8.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_02/graphics/atari font 8x8.psd -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_02/graphics/atari-small.bdf: -------------------------------------------------------------------------------- 1 | STARTFONT 2.1 2 | COMMENT 3 | COMMENT Copyright (c) 1999, Thomas A. Fine 4 | COMMENT 5 | COMMENT License to copy, modify, and distribute for both commercial and 6 | COMMENT non-commercial use is herby granted, provided this notice 7 | COMMENT is preserved. 8 | COMMENT 9 | COMMENT Email to my last name at head.cfa.harvard.edu 10 | COMMENT http://hea-www.harvard.edu/~fine/ 11 | COMMENT 12 | COMMENT Produced with bdfedit, a tcl/tk font editing program 13 | COMMENT written by Thomas A. Fine 14 | COMMENT 15 | FONT -atari-small 16 | SIZE 11 75 75 17 | FONTBOUNDINGBOX 4 8 0 -1 18 | STARTPROPERTIES 19 19 | FONTNAME_REGISTRY "" 20 | FOUNDRY "Misc" 21 | FAMILY_NAME "Fixed" 22 | WEIGHT_NAME "Medium" 23 | SLANT "R" 24 | SETWIDTH_NAME "Normal" 25 | ADD_STYLE_NAME "" 26 | PIXEL_SIZE 8 27 | POINT_SIZE 80 28 | RESOLUTION_X 75 29 | RESOLUTION_Y 75 30 | SPACING "C" 31 | AVERAGE_WIDTH 50 32 | CHARSET_REGISTRY "ISO8859" 33 | CHARSET_ENCODING "1" 34 | FONT_DESCENT 1 35 | FONT_ASCENT 7 36 | COPYRIGHT "Copyright 1999 by Thomas A. Fine" 37 | DEFAULT_CHAR 0 38 | ENDPROPERTIES 39 | CHARS 128 40 | STARTCHAR C000 41 | ENCODING 0 42 | SWIDTH 1 0 43 | DWIDTH 4 0 44 | BBX 4 8 0 -1 45 | BITMAP 46 | 00 47 | 00 48 | 00 49 | 00 50 | 00 51 | 00 52 | 00 53 | 00 54 | ENDCHAR 55 | STARTCHAR C001 56 | ENCODING 1 57 | SWIDTH 1 0 58 | DWIDTH 4 0 59 | BBX 4 8 0 -1 60 | BITMAP 61 | 00 62 | 20 63 | 70 64 | f0 65 | 70 66 | 20 67 | 00 68 | 00 69 | ENDCHAR 70 | STARTCHAR C002 71 | ENCODING 2 72 | SWIDTH 1 0 73 | DWIDTH 4 0 74 | BBX 4 8 0 -1 75 | BITMAP 76 | 00 77 | 20 78 | 50 79 | 20 80 | 50 81 | 20 82 | 50 83 | 20 84 | ENDCHAR 85 | STARTCHAR C003 86 | ENCODING 3 87 | SWIDTH 1 0 88 | DWIDTH 4 0 89 | BBX 4 8 0 -1 90 | BITMAP 91 | 50 92 | 50 93 | 70 94 | 50 95 | 50 96 | 30 97 | 10 98 | 10 99 | ENDCHAR 100 | STARTCHAR C004 101 | ENCODING 4 102 | SWIDTH 1 0 103 | DWIDTH 4 0 104 | BBX 4 8 0 -1 105 | BITMAP 106 | e0 107 | 80 108 | c0 109 | b0 110 | a0 111 | 30 112 | 20 113 | 20 114 | ENDCHAR 115 | STARTCHAR C005 116 | ENCODING 5 117 | SWIDTH 1 0 118 | DWIDTH 4 0 119 | BBX 4 8 0 -1 120 | BITMAP 121 | 60 122 | 80 123 | 60 124 | 00 125 | 30 126 | 20 127 | 30 128 | 20 129 | ENDCHAR 130 | STARTCHAR C006 131 | ENCODING 6 132 | SWIDTH 1 0 133 | DWIDTH 4 0 134 | BBX 4 8 0 -1 135 | BITMAP 136 | 80 137 | 80 138 | 80 139 | e0 140 | 30 141 | 20 142 | 30 143 | 20 144 | ENDCHAR 145 | STARTCHAR C007 146 | ENCODING 7 147 | SWIDTH 1 0 148 | DWIDTH 4 0 149 | BBX 4 8 0 -1 150 | BITMAP 151 | 00 152 | 70 153 | 50 154 | 50 155 | 70 156 | 00 157 | 00 158 | 00 159 | ENDCHAR 160 | STARTCHAR C010 161 | ENCODING 8 162 | SWIDTH 1 0 163 | DWIDTH 4 0 164 | BBX 4 8 0 -1 165 | BITMAP 166 | 00 167 | 20 168 | 70 169 | 20 170 | 00 171 | 70 172 | 00 173 | 00 174 | ENDCHAR 175 | STARTCHAR C011 176 | ENCODING 9 177 | SWIDTH 1 0 178 | DWIDTH 4 0 179 | BBX 4 8 0 -1 180 | BITMAP 181 | 90 182 | d0 183 | b0 184 | 90 185 | 20 186 | 20 187 | 20 188 | 30 189 | ENDCHAR 190 | STARTCHAR C012 191 | ENCODING 10 192 | SWIDTH 1 0 193 | DWIDTH 4 0 194 | BBX 4 8 0 -1 195 | BITMAP 196 | a0 197 | a0 198 | a0 199 | 40 200 | 30 201 | 10 202 | 10 203 | 10 204 | ENDCHAR 205 | STARTCHAR C013 206 | ENCODING 11 207 | SWIDTH 1 0 208 | DWIDTH 4 0 209 | BBX 4 8 0 -1 210 | BITMAP 211 | 20 212 | 20 213 | 20 214 | e0 215 | 00 216 | 00 217 | 00 218 | 00 219 | ENDCHAR 220 | STARTCHAR C014 221 | ENCODING 12 222 | SWIDTH 1 0 223 | DWIDTH 4 0 224 | BBX 4 8 0 -1 225 | BITMAP 226 | 00 227 | 00 228 | 00 229 | e0 230 | 20 231 | 20 232 | 20 233 | 20 234 | ENDCHAR 235 | STARTCHAR C015 236 | ENCODING 13 237 | SWIDTH 1 0 238 | DWIDTH 4 0 239 | BBX 4 8 0 -1 240 | BITMAP 241 | 00 242 | 00 243 | 00 244 | 30 245 | 20 246 | 20 247 | 20 248 | 20 249 | ENDCHAR 250 | STARTCHAR C016 251 | ENCODING 14 252 | SWIDTH 1 0 253 | DWIDTH 4 0 254 | BBX 4 8 0 -1 255 | BITMAP 256 | 20 257 | 20 258 | 20 259 | 30 260 | 00 261 | 00 262 | 00 263 | 00 264 | ENDCHAR 265 | STARTCHAR C017 266 | ENCODING 15 267 | SWIDTH 1 0 268 | DWIDTH 4 0 269 | BBX 4 8 0 -1 270 | BITMAP 271 | 20 272 | 20 273 | 20 274 | f0 275 | 20 276 | 20 277 | 20 278 | 20 279 | ENDCHAR 280 | STARTCHAR C020 281 | ENCODING 16 282 | SWIDTH 1 0 283 | DWIDTH 4 0 284 | BBX 4 8 0 -1 285 | BITMAP 286 | 00 287 | 70 288 | 00 289 | 00 290 | 00 291 | 00 292 | 00 293 | 00 294 | ENDCHAR 295 | STARTCHAR C021 296 | ENCODING 17 297 | SWIDTH 1 0 298 | DWIDTH 4 0 299 | BBX 4 8 0 -1 300 | BITMAP 301 | 00 302 | 00 303 | 70 304 | 00 305 | 00 306 | 00 307 | 00 308 | 00 309 | ENDCHAR 310 | STARTCHAR C022 311 | ENCODING 18 312 | SWIDTH 1 0 313 | DWIDTH 4 0 314 | BBX 4 8 0 -1 315 | BITMAP 316 | 00 317 | 00 318 | 00 319 | 70 320 | 00 321 | 00 322 | 00 323 | 00 324 | ENDCHAR 325 | STARTCHAR C023 326 | ENCODING 19 327 | SWIDTH 1 0 328 | DWIDTH 4 0 329 | BBX 4 8 0 -1 330 | BITMAP 331 | 00 332 | 00 333 | 00 334 | 00 335 | 70 336 | 00 337 | 00 338 | 00 339 | ENDCHAR 340 | STARTCHAR C024 341 | ENCODING 20 342 | SWIDTH 1 0 343 | DWIDTH 4 0 344 | BBX 4 8 0 -1 345 | BITMAP 346 | 00 347 | 00 348 | 00 349 | 00 350 | 00 351 | 70 352 | 00 353 | 00 354 | ENDCHAR 355 | STARTCHAR C025 356 | ENCODING 21 357 | SWIDTH 1 0 358 | DWIDTH 4 0 359 | BBX 4 8 0 -1 360 | BITMAP 361 | 20 362 | 20 363 | 20 364 | 30 365 | 20 366 | 20 367 | 20 368 | 20 369 | ENDCHAR 370 | STARTCHAR C026 371 | ENCODING 22 372 | SWIDTH 1 0 373 | DWIDTH 4 0 374 | BBX 4 8 0 -1 375 | BITMAP 376 | 20 377 | 20 378 | 20 379 | e0 380 | 20 381 | 20 382 | 20 383 | 20 384 | ENDCHAR 385 | STARTCHAR C027 386 | ENCODING 23 387 | SWIDTH 1 0 388 | DWIDTH 4 0 389 | BBX 4 8 0 -1 390 | BITMAP 391 | 20 392 | 20 393 | 20 394 | 20 395 | f0 396 | 00 397 | 00 398 | 00 399 | ENDCHAR 400 | STARTCHAR C030 401 | ENCODING 24 402 | SWIDTH 1 0 403 | DWIDTH 4 0 404 | BBX 4 8 0 -1 405 | BITMAP 406 | 00 407 | 00 408 | 00 409 | 00 410 | f0 411 | 20 412 | 20 413 | 20 414 | ENDCHAR 415 | STARTCHAR C031 416 | ENCODING 25 417 | SWIDTH 1 0 418 | DWIDTH 4 0 419 | BBX 4 8 0 -1 420 | BITMAP 421 | 20 422 | 20 423 | 20 424 | 20 425 | 20 426 | 20 427 | 20 428 | 20 429 | ENDCHAR 430 | STARTCHAR C032 431 | ENCODING 26 432 | SWIDTH 1 0 433 | DWIDTH 4 0 434 | BBX 4 8 0 -1 435 | BITMAP 436 | 00 437 | 10 438 | 20 439 | 40 440 | 20 441 | 10 442 | 70 443 | 00 444 | ENDCHAR 445 | STARTCHAR C033 446 | ENCODING 27 447 | SWIDTH 1 0 448 | DWIDTH 4 0 449 | BBX 4 8 0 -1 450 | BITMAP 451 | 00 452 | 40 453 | 20 454 | 10 455 | 20 456 | 40 457 | 70 458 | 00 459 | ENDCHAR 460 | STARTCHAR C034 461 | ENCODING 28 462 | SWIDTH 1 0 463 | DWIDTH 4 0 464 | BBX 4 8 0 -1 465 | BITMAP 466 | 00 467 | f0 468 | 50 469 | 50 470 | 50 471 | 50 472 | 00 473 | 00 474 | ENDCHAR 475 | STARTCHAR C035 476 | ENCODING 29 477 | SWIDTH 1 0 478 | DWIDTH 4 0 479 | BBX 4 8 0 -1 480 | BITMAP 481 | 00 482 | 10 483 | f0 484 | 20 485 | f0 486 | 40 487 | 00 488 | 00 489 | ENDCHAR 490 | STARTCHAR C036 491 | ENCODING 30 492 | SWIDTH 1 0 493 | DWIDTH 4 0 494 | BBX 4 8 0 -1 495 | BITMAP 496 | 30 497 | 40 498 | e0 499 | 40 500 | 70 501 | d0 502 | 40 503 | 00 504 | ENDCHAR 505 | STARTCHAR C037 506 | ENCODING 31 507 | SWIDTH 1 0 508 | DWIDTH 4 0 509 | BBX 4 8 0 -1 510 | BITMAP 511 | 00 512 | 00 513 | 00 514 | 20 515 | 00 516 | 00 517 | 00 518 | 00 519 | ENDCHAR 520 | STARTCHAR C040 521 | ENCODING 32 522 | SWIDTH 1 0 523 | DWIDTH 4 0 524 | BBX 4 8 0 -1 525 | BITMAP 526 | 00 527 | 00 528 | 00 529 | 00 530 | 00 531 | 00 532 | 00 533 | 00 534 | ENDCHAR 535 | STARTCHAR ! 536 | ENCODING 33 537 | SWIDTH 1 0 538 | DWIDTH 4 0 539 | BBX 4 8 0 -1 540 | BITMAP 541 | 00 542 | 40 543 | 40 544 | 40 545 | 40 546 | 00 547 | 40 548 | 00 549 | ENDCHAR 550 | STARTCHAR " 551 | ENCODING 34 552 | SWIDTH 1 0 553 | DWIDTH 4 0 554 | BBX 4 8 0 -1 555 | BITMAP 556 | 00 557 | A0 558 | A0 559 | 00 560 | 00 561 | 00 562 | 00 563 | 00 564 | ENDCHAR 565 | STARTCHAR # 566 | ENCODING 35 567 | SWIDTH 1 0 568 | DWIDTH 4 0 569 | BBX 4 8 0 -1 570 | BITMAP 571 | 00 572 | a0 573 | E0 574 | A0 575 | A0 576 | E0 577 | a0 578 | 00 579 | ENDCHAR 580 | STARTCHAR $ 581 | ENCODING 36 582 | SWIDTH 1 0 583 | DWIDTH 4 0 584 | BBX 4 8 0 -1 585 | BITMAP 586 | 40 587 | 40 588 | a0 589 | 40 590 | 20 591 | a0 592 | 40 593 | 40 594 | ENDCHAR 595 | STARTCHAR % 596 | ENCODING 37 597 | SWIDTH 1 0 598 | DWIDTH 4 0 599 | BBX 4 8 0 -1 600 | BITMAP 601 | 00 602 | a0 603 | 20 604 | 40 605 | 40 606 | 80 607 | a0 608 | 00 609 | ENDCHAR 610 | STARTCHAR & 611 | ENCODING 38 612 | SWIDTH 1 0 613 | DWIDTH 4 0 614 | BBX 4 8 0 -1 615 | BITMAP 616 | 40 617 | a0 618 | 40 619 | a0 620 | a0 621 | c0 622 | 60 623 | 00 624 | ENDCHAR 625 | STARTCHAR ' 626 | ENCODING 39 627 | SWIDTH 1 0 628 | DWIDTH 4 0 629 | BBX 4 8 0 -1 630 | BITMAP 631 | 00 632 | 40 633 | 40 634 | 00 635 | 00 636 | 00 637 | 00 638 | 00 639 | ENDCHAR 640 | STARTCHAR ( 641 | ENCODING 40 642 | SWIDTH 1 0 643 | DWIDTH 4 0 644 | BBX 4 8 0 -1 645 | BITMAP 646 | 00 647 | 20 648 | 40 649 | 40 650 | 40 651 | 40 652 | 20 653 | 00 654 | ENDCHAR 655 | STARTCHAR ) 656 | ENCODING 41 657 | SWIDTH 1 0 658 | DWIDTH 4 0 659 | BBX 4 8 0 -1 660 | BITMAP 661 | 00 662 | 80 663 | 40 664 | 40 665 | 40 666 | 40 667 | 80 668 | 00 669 | ENDCHAR 670 | STARTCHAR * 671 | ENCODING 42 672 | SWIDTH 1 0 673 | DWIDTH 4 0 674 | BBX 4 8 0 -1 675 | BITMAP 676 | 00 677 | a0 678 | 40 679 | e0 680 | 40 681 | a0 682 | 00 683 | 00 684 | ENDCHAR 685 | STARTCHAR + 686 | ENCODING 43 687 | SWIDTH 1 0 688 | DWIDTH 4 0 689 | BBX 4 8 0 -1 690 | BITMAP 691 | 00 692 | 40 693 | 40 694 | e0 695 | 40 696 | 40 697 | 00 698 | 00 699 | ENDCHAR 700 | STARTCHAR , 701 | ENCODING 44 702 | SWIDTH 1 0 703 | DWIDTH 4 0 704 | BBX 4 8 0 -1 705 | BITMAP 706 | 00 707 | 00 708 | 00 709 | 00 710 | 00 711 | 40 712 | 40 713 | 80 714 | ENDCHAR 715 | STARTCHAR - 716 | ENCODING 45 717 | SWIDTH 1 0 718 | DWIDTH 4 0 719 | BBX 4 8 0 -1 720 | BITMAP 721 | 00 722 | 00 723 | 00 724 | e0 725 | 00 726 | 00 727 | 00 728 | 00 729 | ENDCHAR 730 | STARTCHAR . 731 | ENCODING 46 732 | SWIDTH 1 0 733 | DWIDTH 4 0 734 | BBX 4 8 0 -1 735 | BITMAP 736 | 00 737 | 00 738 | 00 739 | 00 740 | 00 741 | 40 742 | 40 743 | 00 744 | ENDCHAR 745 | STARTCHAR / 746 | ENCODING 47 747 | SWIDTH 1 0 748 | DWIDTH 4 0 749 | BBX 4 8 0 -1 750 | BITMAP 751 | 00 752 | 20 753 | 20 754 | 40 755 | 40 756 | 80 757 | 80 758 | 00 759 | ENDCHAR 760 | STARTCHAR 0 761 | ENCODING 48 762 | SWIDTH 1 0 763 | DWIDTH 4 0 764 | BBX 4 8 0 -1 765 | BITMAP 766 | 00 767 | 40 768 | a0 769 | e0 770 | a0 771 | a0 772 | 40 773 | 00 774 | ENDCHAR 775 | STARTCHAR 1 776 | ENCODING 49 777 | SWIDTH 1 0 778 | DWIDTH 4 0 779 | BBX 4 8 0 -1 780 | BITMAP 781 | 00 782 | 40 783 | c0 784 | 40 785 | 40 786 | 40 787 | e0 788 | 00 789 | ENDCHAR 790 | STARTCHAR 2 791 | ENCODING 50 792 | SWIDTH 1 0 793 | DWIDTH 4 0 794 | BBX 4 8 0 -1 795 | BITMAP 796 | 00 797 | 40 798 | a0 799 | 20 800 | 40 801 | 80 802 | e0 803 | 00 804 | ENDCHAR 805 | STARTCHAR 3 806 | ENCODING 51 807 | SWIDTH 1 0 808 | DWIDTH 4 0 809 | BBX 4 8 0 -1 810 | BITMAP 811 | 00 812 | e0 813 | 20 814 | 40 815 | 20 816 | a0 817 | 40 818 | 00 819 | ENDCHAR 820 | STARTCHAR 4 821 | ENCODING 52 822 | SWIDTH 1 0 823 | DWIDTH 4 0 824 | BBX 4 8 0 -1 825 | BITMAP 826 | 00 827 | 20 828 | 60 829 | a0 830 | e0 831 | 20 832 | 20 833 | 00 834 | ENDCHAR 835 | STARTCHAR 5 836 | ENCODING 53 837 | SWIDTH 1 0 838 | DWIDTH 4 0 839 | BBX 4 8 0 -1 840 | BITMAP 841 | 00 842 | e0 843 | 80 844 | c0 845 | 20 846 | a0 847 | 40 848 | 00 849 | ENDCHAR 850 | STARTCHAR 6 851 | ENCODING 54 852 | SWIDTH 1 0 853 | DWIDTH 4 0 854 | BBX 4 8 0 -1 855 | BITMAP 856 | 00 857 | 60 858 | 80 859 | c0 860 | a0 861 | a0 862 | 40 863 | 00 864 | ENDCHAR 865 | STARTCHAR 7 866 | ENCODING 55 867 | SWIDTH 1 0 868 | DWIDTH 4 0 869 | BBX 4 8 0 -1 870 | BITMAP 871 | 00 872 | e0 873 | 20 874 | 20 875 | 40 876 | 40 877 | 40 878 | 00 879 | ENDCHAR 880 | STARTCHAR 8 881 | ENCODING 56 882 | SWIDTH 1 0 883 | DWIDTH 4 0 884 | BBX 4 8 0 -1 885 | BITMAP 886 | 00 887 | 40 888 | a0 889 | 40 890 | a0 891 | a0 892 | 40 893 | 00 894 | ENDCHAR 895 | STARTCHAR 9 896 | ENCODING 57 897 | SWIDTH 1 0 898 | DWIDTH 4 0 899 | BBX 4 8 0 -1 900 | BITMAP 901 | 00 902 | 40 903 | a0 904 | a0 905 | 60 906 | 20 907 | c0 908 | 00 909 | ENDCHAR 910 | STARTCHAR : 911 | ENCODING 58 912 | SWIDTH 1 0 913 | DWIDTH 4 0 914 | BBX 4 8 0 -1 915 | BITMAP 916 | 00 917 | 00 918 | 40 919 | 00 920 | 00 921 | 40 922 | 00 923 | 00 924 | ENDCHAR 925 | STARTCHAR ; 926 | ENCODING 59 927 | SWIDTH 1 0 928 | DWIDTH 4 0 929 | BBX 4 8 0 -1 930 | BITMAP 931 | 00 932 | 00 933 | 40 934 | 00 935 | 00 936 | 40 937 | 80 938 | 00 939 | ENDCHAR 940 | STARTCHAR < 941 | ENCODING 60 942 | SWIDTH 1 0 943 | DWIDTH 4 0 944 | BBX 4 8 0 -1 945 | BITMAP 946 | 00 947 | 00 948 | 20 949 | 40 950 | 80 951 | 40 952 | 20 953 | 00 954 | ENDCHAR 955 | STARTCHAR = 956 | ENCODING 61 957 | SWIDTH 1 0 958 | DWIDTH 4 0 959 | BBX 4 8 0 -1 960 | BITMAP 961 | 00 962 | 00 963 | e0 964 | 00 965 | e0 966 | 00 967 | 00 968 | 00 969 | ENDCHAR 970 | STARTCHAR > 971 | ENCODING 62 972 | SWIDTH 1 0 973 | DWIDTH 4 0 974 | BBX 4 8 0 -1 975 | BITMAP 976 | 00 977 | 00 978 | 80 979 | 40 980 | 20 981 | 40 982 | 80 983 | 00 984 | ENDCHAR 985 | STARTCHAR ? 986 | ENCODING 63 987 | SWIDTH 1 0 988 | DWIDTH 4 0 989 | BBX 4 8 0 -1 990 | BITMAP 991 | 00 992 | 40 993 | a0 994 | 20 995 | 40 996 | 00 997 | 40 998 | 00 999 | ENDCHAR 1000 | STARTCHAR @ 1001 | ENCODING 64 1002 | SWIDTH 1 0 1003 | DWIDTH 4 0 1004 | BBX 4 8 0 -1 1005 | BITMAP 1006 | 00 1007 | 40 1008 | a0 1009 | a0 1010 | 80 1011 | 80 1012 | 60 1013 | 00 1014 | ENDCHAR 1015 | STARTCHAR A 1016 | ENCODING 65 1017 | SWIDTH 1 0 1018 | DWIDTH 4 0 1019 | BBX 4 8 0 -1 1020 | BITMAP 1021 | 00 1022 | 40 1023 | a0 1024 | a0 1025 | e0 1026 | a0 1027 | a0 1028 | 00 1029 | ENDCHAR 1030 | STARTCHAR B 1031 | ENCODING 66 1032 | SWIDTH 1 0 1033 | DWIDTH 4 0 1034 | BBX 4 8 0 -1 1035 | BITMAP 1036 | 00 1037 | c0 1038 | a0 1039 | c0 1040 | a0 1041 | a0 1042 | c0 1043 | 00 1044 | ENDCHAR 1045 | STARTCHAR C 1046 | ENCODING 67 1047 | SWIDTH 1 0 1048 | DWIDTH 4 0 1049 | BBX 4 8 0 -1 1050 | BITMAP 1051 | 00 1052 | 40 1053 | a0 1054 | 80 1055 | 80 1056 | a0 1057 | 40 1058 | 00 1059 | ENDCHAR 1060 | STARTCHAR D 1061 | ENCODING 68 1062 | SWIDTH 1 0 1063 | DWIDTH 4 0 1064 | BBX 4 8 0 -1 1065 | BITMAP 1066 | 00 1067 | c0 1068 | a0 1069 | a0 1070 | a0 1071 | a0 1072 | c0 1073 | 00 1074 | ENDCHAR 1075 | STARTCHAR E 1076 | ENCODING 69 1077 | SWIDTH 1 0 1078 | DWIDTH 4 0 1079 | BBX 4 8 0 -1 1080 | BITMAP 1081 | 00 1082 | e0 1083 | 80 1084 | e0 1085 | 80 1086 | 80 1087 | e0 1088 | 00 1089 | ENDCHAR 1090 | STARTCHAR F 1091 | ENCODING 70 1092 | SWIDTH 1 0 1093 | DWIDTH 4 0 1094 | BBX 4 8 0 -1 1095 | BITMAP 1096 | 00 1097 | e0 1098 | 80 1099 | e0 1100 | 80 1101 | 80 1102 | 80 1103 | 00 1104 | ENDCHAR 1105 | STARTCHAR G 1106 | ENCODING 71 1107 | SWIDTH 1 0 1108 | DWIDTH 4 0 1109 | BBX 4 8 0 -1 1110 | BITMAP 1111 | 00 1112 | 40 1113 | a0 1114 | 80 1115 | a0 1116 | a0 1117 | 40 1118 | 00 1119 | ENDCHAR 1120 | STARTCHAR H 1121 | ENCODING 72 1122 | SWIDTH 1 0 1123 | DWIDTH 4 0 1124 | BBX 4 8 0 -1 1125 | BITMAP 1126 | 00 1127 | a0 1128 | a0 1129 | e0 1130 | a0 1131 | a0 1132 | a0 1133 | 00 1134 | ENDCHAR 1135 | STARTCHAR I 1136 | ENCODING 73 1137 | SWIDTH 1 0 1138 | DWIDTH 4 0 1139 | BBX 4 8 0 -1 1140 | BITMAP 1141 | 00 1142 | e0 1143 | 40 1144 | 40 1145 | 40 1146 | 40 1147 | e0 1148 | 00 1149 | ENDCHAR 1150 | STARTCHAR J 1151 | ENCODING 74 1152 | SWIDTH 1 0 1153 | DWIDTH 4 0 1154 | BBX 4 8 0 -1 1155 | BITMAP 1156 | 00 1157 | 20 1158 | 20 1159 | 20 1160 | 20 1161 | a0 1162 | 40 1163 | 00 1164 | ENDCHAR 1165 | STARTCHAR K 1166 | ENCODING 75 1167 | SWIDTH 1 0 1168 | DWIDTH 4 0 1169 | BBX 4 8 0 -1 1170 | BITMAP 1171 | 00 1172 | a0 1173 | a0 1174 | c0 1175 | a0 1176 | a0 1177 | a0 1178 | 00 1179 | ENDCHAR 1180 | STARTCHAR L 1181 | ENCODING 76 1182 | SWIDTH 1 0 1183 | DWIDTH 4 0 1184 | BBX 4 8 0 -1 1185 | BITMAP 1186 | 00 1187 | 80 1188 | 80 1189 | 80 1190 | 80 1191 | 80 1192 | e0 1193 | 00 1194 | ENDCHAR 1195 | STARTCHAR M 1196 | ENCODING 77 1197 | SWIDTH 1 0 1198 | DWIDTH 4 0 1199 | BBX 4 8 0 -1 1200 | BITMAP 1201 | 00 1202 | a0 1203 | e0 1204 | a0 1205 | a0 1206 | a0 1207 | a0 1208 | 00 1209 | ENDCHAR 1210 | STARTCHAR N 1211 | ENCODING 78 1212 | SWIDTH 1 0 1213 | DWIDTH 4 0 1214 | BBX 4 8 0 -1 1215 | BITMAP 1216 | 00 1217 | 20 1218 | a0 1219 | e0 1220 | e0 1221 | a0 1222 | 80 1223 | 00 1224 | ENDCHAR 1225 | STARTCHAR O 1226 | ENCODING 79 1227 | SWIDTH 1 0 1228 | DWIDTH 4 0 1229 | BBX 4 8 0 -1 1230 | BITMAP 1231 | 00 1232 | 40 1233 | a0 1234 | a0 1235 | a0 1236 | a0 1237 | 40 1238 | 00 1239 | ENDCHAR 1240 | STARTCHAR P 1241 | ENCODING 80 1242 | SWIDTH 1 0 1243 | DWIDTH 4 0 1244 | BBX 4 8 0 -1 1245 | BITMAP 1246 | 00 1247 | c0 1248 | a0 1249 | a0 1250 | c0 1251 | 80 1252 | 80 1253 | 00 1254 | ENDCHAR 1255 | STARTCHAR Q 1256 | ENCODING 81 1257 | SWIDTH 1 0 1258 | DWIDTH 4 0 1259 | BBX 4 8 0 -1 1260 | BITMAP 1261 | 00 1262 | 40 1263 | a0 1264 | a0 1265 | a0 1266 | c0 1267 | 60 1268 | 00 1269 | ENDCHAR 1270 | STARTCHAR R 1271 | ENCODING 82 1272 | SWIDTH 1 0 1273 | DWIDTH 4 0 1274 | BBX 4 8 0 -1 1275 | BITMAP 1276 | 00 1277 | c0 1278 | a0 1279 | a0 1280 | c0 1281 | a0 1282 | a0 1283 | 00 1284 | ENDCHAR 1285 | STARTCHAR S 1286 | ENCODING 83 1287 | SWIDTH 1 0 1288 | DWIDTH 4 0 1289 | BBX 4 8 0 -1 1290 | BITMAP 1291 | 00 1292 | 40 1293 | a0 1294 | 40 1295 | 20 1296 | a0 1297 | 40 1298 | 00 1299 | ENDCHAR 1300 | STARTCHAR T 1301 | ENCODING 84 1302 | SWIDTH 1 0 1303 | DWIDTH 4 0 1304 | BBX 4 8 0 -1 1305 | BITMAP 1306 | 00 1307 | e0 1308 | 40 1309 | 40 1310 | 40 1311 | 40 1312 | 40 1313 | 00 1314 | ENDCHAR 1315 | STARTCHAR U 1316 | ENCODING 85 1317 | SWIDTH 1 0 1318 | DWIDTH 4 0 1319 | BBX 4 8 0 -1 1320 | BITMAP 1321 | 00 1322 | a0 1323 | a0 1324 | a0 1325 | a0 1326 | a0 1327 | e0 1328 | 00 1329 | ENDCHAR 1330 | STARTCHAR V 1331 | ENCODING 86 1332 | SWIDTH 1 0 1333 | DWIDTH 4 0 1334 | BBX 4 8 0 -1 1335 | BITMAP 1336 | 00 1337 | a0 1338 | a0 1339 | a0 1340 | a0 1341 | a0 1342 | 40 1343 | 00 1344 | ENDCHAR 1345 | STARTCHAR W 1346 | ENCODING 87 1347 | SWIDTH 1 0 1348 | DWIDTH 4 0 1349 | BBX 4 8 0 -1 1350 | BITMAP 1351 | 00 1352 | a0 1353 | a0 1354 | a0 1355 | a0 1356 | e0 1357 | a0 1358 | 00 1359 | ENDCHAR 1360 | STARTCHAR X 1361 | ENCODING 88 1362 | SWIDTH 1 0 1363 | DWIDTH 4 0 1364 | BBX 4 8 0 -1 1365 | BITMAP 1366 | 00 1367 | a0 1368 | a0 1369 | 40 1370 | a0 1371 | a0 1372 | a0 1373 | 00 1374 | ENDCHAR 1375 | STARTCHAR Y 1376 | ENCODING 89 1377 | SWIDTH 1 0 1378 | DWIDTH 4 0 1379 | BBX 4 8 0 -1 1380 | BITMAP 1381 | 00 1382 | a0 1383 | a0 1384 | 40 1385 | 40 1386 | 40 1387 | 40 1388 | 00 1389 | ENDCHAR 1390 | STARTCHAR Z 1391 | ENCODING 90 1392 | SWIDTH 1 0 1393 | DWIDTH 4 0 1394 | BBX 4 8 0 -1 1395 | BITMAP 1396 | 00 1397 | e0 1398 | 20 1399 | 40 1400 | 40 1401 | 80 1402 | e0 1403 | 00 1404 | ENDCHAR 1405 | STARTCHAR [ 1406 | ENCODING 91 1407 | SWIDTH 1 0 1408 | DWIDTH 4 0 1409 | BBX 4 8 0 -1 1410 | BITMAP 1411 | 00 1412 | 60 1413 | 40 1414 | 40 1415 | 40 1416 | 40 1417 | 60 1418 | 00 1419 | ENDCHAR 1420 | STARTCHAR \ 1421 | ENCODING 92 1422 | SWIDTH 1 0 1423 | DWIDTH 4 0 1424 | BBX 4 8 0 -1 1425 | BITMAP 1426 | 00 1427 | 80 1428 | 80 1429 | 40 1430 | 40 1431 | 20 1432 | 20 1433 | 00 1434 | ENDCHAR 1435 | STARTCHAR ] 1436 | ENCODING 93 1437 | SWIDTH 1 0 1438 | DWIDTH 4 0 1439 | BBX 4 8 0 -1 1440 | BITMAP 1441 | 00 1442 | c0 1443 | 40 1444 | 40 1445 | 40 1446 | 40 1447 | c0 1448 | 00 1449 | ENDCHAR 1450 | STARTCHAR ^ 1451 | ENCODING 94 1452 | SWIDTH 1 0 1453 | DWIDTH 4 0 1454 | BBX 4 8 0 -1 1455 | BITMAP 1456 | 00 1457 | 40 1458 | a0 1459 | 00 1460 | 00 1461 | 00 1462 | 00 1463 | 00 1464 | ENDCHAR 1465 | STARTCHAR _ 1466 | ENCODING 95 1467 | SWIDTH 1 0 1468 | DWIDTH 4 0 1469 | BBX 4 8 0 -1 1470 | BITMAP 1471 | 00 1472 | 00 1473 | 00 1474 | 00 1475 | 00 1476 | 00 1477 | 00 1478 | f0 1479 | ENDCHAR 1480 | STARTCHAR ` 1481 | ENCODING 96 1482 | SWIDTH 1 0 1483 | DWIDTH 4 0 1484 | BBX 4 8 0 -1 1485 | BITMAP 1486 | 00 1487 | 80 1488 | 40 1489 | 00 1490 | 00 1491 | 00 1492 | 00 1493 | 00 1494 | ENDCHAR 1495 | STARTCHAR a 1496 | ENCODING 97 1497 | SWIDTH 1 0 1498 | DWIDTH 4 0 1499 | BBX 4 8 0 -1 1500 | BITMAP 1501 | 00 1502 | 00 1503 | c0 1504 | 20 1505 | 60 1506 | a0 1507 | 60 1508 | 00 1509 | ENDCHAR 1510 | STARTCHAR b 1511 | ENCODING 98 1512 | SWIDTH 1 0 1513 | DWIDTH 4 0 1514 | BBX 4 8 0 -1 1515 | BITMAP 1516 | 00 1517 | 80 1518 | 80 1519 | c0 1520 | a0 1521 | a0 1522 | c0 1523 | 00 1524 | ENDCHAR 1525 | STARTCHAR c 1526 | ENCODING 99 1527 | SWIDTH 1 0 1528 | DWIDTH 4 0 1529 | BBX 4 8 0 -1 1530 | BITMAP 1531 | 00 1532 | 00 1533 | 60 1534 | 80 1535 | 80 1536 | 80 1537 | 60 1538 | 00 1539 | ENDCHAR 1540 | STARTCHAR d 1541 | ENCODING 100 1542 | SWIDTH 1 0 1543 | DWIDTH 4 0 1544 | BBX 4 8 0 -1 1545 | BITMAP 1546 | 00 1547 | 20 1548 | 20 1549 | 60 1550 | a0 1551 | a0 1552 | 60 1553 | 00 1554 | ENDCHAR 1555 | STARTCHAR e 1556 | ENCODING 101 1557 | SWIDTH 1 0 1558 | DWIDTH 4 0 1559 | BBX 4 8 0 -1 1560 | BITMAP 1561 | 00 1562 | 00 1563 | 40 1564 | a0 1565 | e0 1566 | 80 1567 | 60 1568 | 00 1569 | ENDCHAR 1570 | STARTCHAR f 1571 | ENCODING 102 1572 | SWIDTH 1 0 1573 | DWIDTH 4 0 1574 | BBX 4 8 0 -1 1575 | BITMAP 1576 | 00 1577 | 20 1578 | 40 1579 | e0 1580 | 40 1581 | 40 1582 | 40 1583 | 00 1584 | ENDCHAR 1585 | STARTCHAR g 1586 | ENCODING 103 1587 | SWIDTH 1 0 1588 | DWIDTH 4 0 1589 | BBX 4 8 0 -1 1590 | BITMAP 1591 | 00 1592 | 00 1593 | 60 1594 | a0 1595 | a0 1596 | 60 1597 | 20 1598 | c0 1599 | ENDCHAR 1600 | STARTCHAR h 1601 | ENCODING 104 1602 | SWIDTH 1 0 1603 | DWIDTH 4 0 1604 | BBX 4 8 0 -1 1605 | BITMAP 1606 | 00 1607 | 80 1608 | 80 1609 | c0 1610 | a0 1611 | a0 1612 | a0 1613 | 00 1614 | ENDCHAR 1615 | STARTCHAR i 1616 | ENCODING 105 1617 | SWIDTH 1 0 1618 | DWIDTH 4 0 1619 | BBX 4 8 0 -1 1620 | BITMAP 1621 | 00 1622 | 40 1623 | 00 1624 | c0 1625 | 40 1626 | 40 1627 | e0 1628 | 00 1629 | ENDCHAR 1630 | STARTCHAR j 1631 | ENCODING 106 1632 | SWIDTH 1 0 1633 | DWIDTH 4 0 1634 | BBX 4 8 0 -1 1635 | BITMAP 1636 | 00 1637 | 20 1638 | 00 1639 | 60 1640 | 20 1641 | 20 1642 | 20 1643 | c0 1644 | ENDCHAR 1645 | STARTCHAR k 1646 | ENCODING 107 1647 | SWIDTH 1 0 1648 | DWIDTH 4 0 1649 | BBX 4 8 0 -1 1650 | BITMAP 1651 | 00 1652 | 80 1653 | 80 1654 | a0 1655 | c0 1656 | a0 1657 | a0 1658 | 00 1659 | ENDCHAR 1660 | STARTCHAR l 1661 | ENCODING 108 1662 | SWIDTH 1 0 1663 | DWIDTH 4 0 1664 | BBX 4 8 0 -1 1665 | BITMAP 1666 | 00 1667 | 40 1668 | 40 1669 | 40 1670 | 40 1671 | 40 1672 | 40 1673 | 00 1674 | ENDCHAR 1675 | STARTCHAR m 1676 | ENCODING 109 1677 | SWIDTH 1 0 1678 | DWIDTH 4 0 1679 | BBX 4 8 0 -1 1680 | BITMAP 1681 | 00 1682 | 00 1683 | a0 1684 | e0 1685 | a0 1686 | a0 1687 | a0 1688 | 00 1689 | ENDCHAR 1690 | STARTCHAR n 1691 | ENCODING 110 1692 | SWIDTH 1 0 1693 | DWIDTH 4 0 1694 | BBX 4 8 0 -1 1695 | BITMAP 1696 | 00 1697 | 00 1698 | c0 1699 | a0 1700 | a0 1701 | a0 1702 | a0 1703 | 00 1704 | ENDCHAR 1705 | STARTCHAR o 1706 | ENCODING 111 1707 | SWIDTH 1 0 1708 | DWIDTH 4 0 1709 | BBX 4 8 0 -1 1710 | BITMAP 1711 | 00 1712 | 00 1713 | 40 1714 | a0 1715 | a0 1716 | a0 1717 | 40 1718 | 00 1719 | ENDCHAR 1720 | STARTCHAR p 1721 | ENCODING 112 1722 | SWIDTH 1 0 1723 | DWIDTH 4 0 1724 | BBX 4 8 0 -1 1725 | BITMAP 1726 | 00 1727 | 00 1728 | c0 1729 | a0 1730 | a0 1731 | c0 1732 | 80 1733 | 80 1734 | ENDCHAR 1735 | STARTCHAR q 1736 | ENCODING 113 1737 | SWIDTH 1 0 1738 | DWIDTH 4 0 1739 | BBX 4 8 0 -1 1740 | BITMAP 1741 | 00 1742 | 00 1743 | 60 1744 | a0 1745 | a0 1746 | 60 1747 | 20 1748 | 20 1749 | ENDCHAR 1750 | STARTCHAR r 1751 | ENCODING 114 1752 | SWIDTH 1 0 1753 | DWIDTH 4 0 1754 | BBX 4 8 0 -1 1755 | BITMAP 1756 | 00 1757 | 00 1758 | 60 1759 | 80 1760 | 80 1761 | 80 1762 | 80 1763 | 00 1764 | ENDCHAR 1765 | STARTCHAR s 1766 | ENCODING 115 1767 | SWIDTH 1 0 1768 | DWIDTH 4 0 1769 | BBX 4 8 0 -1 1770 | BITMAP 1771 | 00 1772 | 00 1773 | 60 1774 | 80 1775 | 40 1776 | 20 1777 | c0 1778 | 00 1779 | ENDCHAR 1780 | STARTCHAR t 1781 | ENCODING 116 1782 | SWIDTH 1 0 1783 | DWIDTH 4 0 1784 | BBX 4 8 0 -1 1785 | BITMAP 1786 | 00 1787 | 40 1788 | 40 1789 | e0 1790 | 40 1791 | 40 1792 | 40 1793 | 00 1794 | ENDCHAR 1795 | STARTCHAR u 1796 | ENCODING 117 1797 | SWIDTH 1 0 1798 | DWIDTH 4 0 1799 | BBX 4 8 0 -1 1800 | BITMAP 1801 | 00 1802 | 00 1803 | a0 1804 | a0 1805 | a0 1806 | a0 1807 | e0 1808 | 00 1809 | ENDCHAR 1810 | STARTCHAR v 1811 | ENCODING 118 1812 | SWIDTH 1 0 1813 | DWIDTH 4 0 1814 | BBX 4 8 0 -1 1815 | BITMAP 1816 | 00 1817 | 00 1818 | a0 1819 | a0 1820 | a0 1821 | a0 1822 | 40 1823 | 00 1824 | ENDCHAR 1825 | STARTCHAR w 1826 | ENCODING 119 1827 | SWIDTH 1 0 1828 | DWIDTH 4 0 1829 | BBX 4 8 0 -1 1830 | BITMAP 1831 | 00 1832 | 00 1833 | a0 1834 | a0 1835 | a0 1836 | e0 1837 | a0 1838 | 00 1839 | ENDCHAR 1840 | STARTCHAR x 1841 | ENCODING 120 1842 | SWIDTH 1 0 1843 | DWIDTH 4 0 1844 | BBX 4 8 0 -1 1845 | BITMAP 1846 | 00 1847 | 00 1848 | a0 1849 | a0 1850 | 40 1851 | a0 1852 | a0 1853 | 00 1854 | ENDCHAR 1855 | STARTCHAR y 1856 | ENCODING 121 1857 | SWIDTH 1 0 1858 | DWIDTH 4 0 1859 | BBX 4 8 0 -1 1860 | BITMAP 1861 | 00 1862 | 00 1863 | a0 1864 | a0 1865 | a0 1866 | 60 1867 | 20 1868 | c0 1869 | ENDCHAR 1870 | STARTCHAR z 1871 | ENCODING 122 1872 | SWIDTH 1 0 1873 | DWIDTH 4 0 1874 | BBX 4 8 0 -1 1875 | BITMAP 1876 | 00 1877 | 00 1878 | e0 1879 | 20 1880 | 40 1881 | 80 1882 | e0 1883 | 00 1884 | ENDCHAR 1885 | STARTCHAR { 1886 | ENCODING 123 1887 | SWIDTH 1 0 1888 | DWIDTH 4 0 1889 | BBX 4 8 0 -1 1890 | BITMAP 1891 | 20 1892 | 40 1893 | 40 1894 | 80 1895 | 40 1896 | 40 1897 | 20 1898 | 00 1899 | ENDCHAR 1900 | STARTCHAR | 1901 | ENCODING 124 1902 | SWIDTH 1 0 1903 | DWIDTH 4 0 1904 | BBX 4 8 0 -1 1905 | BITMAP 1906 | 40 1907 | 40 1908 | 40 1909 | 00 1910 | 40 1911 | 40 1912 | 40 1913 | 00 1914 | ENDCHAR 1915 | STARTCHAR } 1916 | ENCODING 125 1917 | SWIDTH 1 0 1918 | DWIDTH 4 0 1919 | BBX 4 8 0 -1 1920 | BITMAP 1921 | 80 1922 | 40 1923 | 40 1924 | 20 1925 | 40 1926 | 40 1927 | 80 1928 | 00 1929 | ENDCHAR 1930 | STARTCHAR ~ 1931 | ENCODING 126 1932 | SWIDTH 1 0 1933 | DWIDTH 4 0 1934 | BBX 4 8 0 -1 1935 | BITMAP 1936 | 00 1937 | 00 1938 | c0 1939 | 60 1940 | 00 1941 | 00 1942 | 00 1943 | 00 1944 | ENDCHAR 1945 | STARTCHAR C177 1946 | ENCODING 127 1947 | SWIDTH 1 0 1948 | DWIDTH 4 0 1949 | BBX 4 8 0 -1 1950 | BITMAP 1951 | 00 1952 | 00 1953 | 00 1954 | 00 1955 | 00 1956 | 00 1957 | 00 1958 | 00 1959 | ENDCHAR 1960 | ENDFONT 1961 | -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_02/graphics/super font 8x8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_02/graphics/super font 8x8.png -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_02/graphics/super font 8x8.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_02/graphics/super font 8x8.psd -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_02/graphics/super font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_02/graphics/super font.png -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_03/defines.h: -------------------------------------------------------------------------------- 1 | #define BLACK 0 2 | #define WHITE 1 3 | #define INVERSE 2 4 | 5 | #define SSD1306_I2C_ADDRESS 0x3C // 011110+SA0+RW - 0x3C or 0x3D 6 | 7 | #define SSD1306_LCDWIDTH 128 8 | #define SSD1306_LCDHEIGHT 64 9 | 10 | #define SSD1306_SETCONTRAST 0x81 11 | #define SSD1306_DISPLAYALLON_RESUME 0xA4 12 | #define SSD1306_DISPLAYALLON 0xA5 13 | #define SSD1306_NORMALDISPLAY 0xA6 14 | #define SSD1306_INVERTDISPLAY 0xA7 15 | #define SSD1306_DISPLAYOFF 0xAE 16 | #define SSD1306_DISPLAYON 0xAF 17 | 18 | #define SSD1306_SETDISPLAYOFFSET 0xD3 19 | #define SSD1306_SETCOMPINS 0xDA 20 | 21 | #define SSD1306_SETVCOMDETECT 0xDB 22 | 23 | #define SSD1306_SETDISPLAYCLOCKDIV 0xD5 24 | #define SSD1306_SETPRECHARGE 0xD9 25 | 26 | #define SSD1306_SETMULTIPLEX 0xA8 27 | 28 | #define SSD1306_SETLOWCOLUMN 0x00 29 | #define SSD1306_SETHIGHCOLUMN 0x10 30 | 31 | #define SSD1306_SETSTARTLINE 0x40 32 | 33 | #define SSD1306_MEMORYMODE 0x20 34 | #define SSD1306_COLUMNADDR 0x21 35 | #define SSD1306_PAGEADDR 0x22 36 | 37 | #define SSD1306_COMSCANINC 0xC0 38 | #define SSD1306_COMSCANDEC 0xC8 39 | 40 | #define SSD1306_SEGREMAP 0xA0 41 | 42 | #define SSD1306_CHARGEPUMP 0x8D 43 | 44 | #define SSD1306_EXTERNALVCC 0x1 45 | #define SSD1306_SWITCHCAPVCC 0x2 46 | 47 | // Scrolling #defines 48 | #define SSD1306_ACTIVATE_SCROLL 0x2F 49 | #define SSD1306_DEACTIVATE_SCROLL 0x2E 50 | #define SSD1306_SET_VERTICAL_SCROLL_AREA 0xA3 51 | #define SSD1306_RIGHT_HORIZONTAL_SCROLL 0x26 52 | #define SSD1306_LEFT_HORIZONTAL_SCROLL 0x27 53 | #define SSD1306_VERTICAL_AND_RIGHT_HORIZONTAL_SCROLL 0x29 54 | #define SSD1306_VERTICAL_AND_LEFT_HORIZONTAL_SCROLL 0x2A 55 | 56 | uint8_t opCode = 0; //When a command code comes in we copy it to this. Then we collect X payload bytes and execute command 57 | uint8_t payLoadPointer = 0; //What buffer position we are writing payload bytes to 58 | uint8_t payLoad[4]; //Buffer to store command payload bytes as they stream in 59 | 60 | uint8_t payLoadSize[] = {0, 1, 0, 0, 0, 0, 0, 0, 61 | 0, 0, 0, 0, 0, 0, 0, 0, 62 | 0, 0, 0, 0, 0, 0, 0, 0, 63 | 0, 0, 0, 0, 0, 0, 0, 1}; 64 | 65 | const uint8_t font8x8[] PROGMEM = { //The 8x8 text font with extended graphics and a set of tall letters 66 | 67 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x38, 0x07, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xc1, 0x79, 0xbf, 0xdd, 0xed, 0xf5, 0xf9, 0x3f, 0xc7, 0xd9, 0x1d, 0xc5, 0xf9, 0x3f, 0xc7, 0xf9, 0x3d, 0xc5, 0xf9, 0x3f, 0x07, 0xe0, 0x9c, 0x83, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xe0, 0xfc, 0x8f, 0xf4, 0x8d, 0xfd, 0xcd, 0xb7, 0xcf, 0xfc, 0xed, 0x85, 0xec, 0xff, 0xcf, 0x94, 0xad, 0xfd, 0xfc, 0x1f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0x5e, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x0e, 0x00, 0x00, 0x0e, 0x0e, 0x00, 0x24, 0x7e, 0x7e, 0x24, 0x24, 0x7e, 0x7e, 0x24, 0x00, 0x24, 0x2e, 0x6b, 0x6b, 0x3a, 0x12, 0x00, 0x00, 0x66, 0x36, 0x18, 0x0c, 0x66, 0x62, 0x00, 0x00, 0x30, 0x7a, 0x4f, 0x5d, 0x37, 0x72, 0x50, 0x00, 0x10, 0x0c, 0x0c, 0x06, 0x0c, 0x0c, 0x10, 0x00, 0x00, 0x00, 0x3c, 0x7e, 0x66, 0x42, 0x00, 0x00, 0x00, 0x42, 0x66, 0x7e, 0x3c, 0x00, 0x00, 0x08, 0x2a, 0x3e, 0x1c, 0x1c, 0x3e, 0x2a, 0x08, 0x00, 0x08, 0x08, 0x3e, 0x3e, 0x08, 0x08, 0x00, 0x00, 0x00, 0x80, 0xe0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x02, 0x00, 0x00, 0x3c, 0x7e, 0x52, 0x4a, 0x7e, 0x3c, 0x00, 0x00, 0x40, 0x44, 0x7e, 0x7e, 0x40, 0x40, 0x00, 0x00, 0x44, 0x66, 0x72, 0x5a, 0x4e, 0x44, 0x00, 0x00, 0x22, 0x62, 0x4a, 0x5e, 0x76, 0x22, 0x00, 0x00, 0x30, 0x38, 0x2c, 0x7e, 0x7e, 0x20, 0x00, 0x00, 0x2e, 0x6e, 0x4a, 0x4a, 0x7a, 0x32, 0x00, 0x00, 0x3c, 0x7e, 0x4a, 0x4a, 0x7a, 0x30, 0x00, 0x00, 0x02, 0x62, 0x72, 0x1a, 0x0e, 0x06, 0x00, 0x00, 0x34, 0x7e, 0x4a, 0x4a, 0x7e, 0x34, 0x00, 0x00, 0x04, 0x4e, 0x4a, 0x6a, 0x3e, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xec, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1c, 0x3e, 0x7f, 0x00, 0x00, 0x00, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x00, 0x7f, 0x3e, 0x1c, 0x08, 0x00, 0x00, 0x00, 0x04, 0x06, 0x52, 0x5a, 0x0e, 0x04, 0x00, 0x00, 0x3c, 0x7e, 0x42, 0x5a, 0x5e, 0x5c, 0x00, 0x00, 0x78, 0x7c, 0x26, 0x26, 0x7c, 0x78, 0x00, 0x00, 0x7e, 0x7e, 0x4a, 0x4a, 0x7e, 0x34, 0x00, 0x00, 0x3c, 0x7e, 0x42, 0x42, 0x66, 0x24, 0x00, 0x00, 0x7e, 0x7e, 0x42, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x7e, 0x7e, 0x4a, 0x4a, 0x4a, 0x42, 0x00, 0x00, 0x7e, 0x7e, 0x0a, 0x0a, 0x0a, 0x02, 0x00, 0x00, 0x3c, 0x7e, 0x42, 0x52, 0x72, 0x72, 0x00, 0x00, 0x7e, 0x7e, 0x08, 0x08, 0x7e, 0x7e, 0x00, 0x00, 0x42, 0x42, 0x7e, 0x7e, 0x42, 0x42, 0x00, 0x00, 0x20, 0x60, 0x40, 0x42, 0x7e, 0x3e, 0x00, 0x00, 0x7e, 0x7e, 0x18, 0x3c, 0x66, 0x42, 0x00, 0x00, 0x7e, 0x7e, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x7e, 0x7e, 0x0c, 0x18, 0x0c, 0x7e, 0x7e, 0x00, 0x7e, 0x7e, 0x1c, 0x38, 0x7e, 0x7e, 0x00, 0x00, 0x3c, 0x7e, 0x42, 0x42, 0x7e, 0x3c, 0x00, 0x00, 0x7e, 0x7e, 0x12, 0x12, 0x1e, 0x0c, 0x00, 0x00, 0x3c, 0x7e, 0x42, 0x22, 0x7e, 0x5c, 0x00, 0x00, 0x7e, 0x7e, 0x12, 0x32, 0x7e, 0x4c, 0x00, 0x00, 0x04, 0x4e, 0x4a, 0x4a, 0x7a, 0x30, 0x00, 0x00, 0x02, 0x02, 0x7e, 0x7e, 0x02, 0x02, 0x00, 0x00, 0x7e, 0x7e, 0x40, 0x40, 0x7e, 0x7e, 0x00, 0x00, 0x1e, 0x3e, 0x60, 0x60, 0x3e, 0x1e, 0x00, 0x00, 0x7e, 0x7e, 0x30, 0x18, 0x30, 0x7e, 0x7e, 0x00, 0x66, 0x7e, 0x18, 0x18, 0x7e, 0x66, 0x00, 0x00, 0x06, 0x0e, 0x78, 0x78, 0x0e, 0x06, 0x00, 0x00, 0x62, 0x72, 0x5a, 0x4e, 0x46, 0x42, 0x00, 0x00, 0x08, 0x1c, 0x3e, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x40, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x3e, 0x1c, 0x08, 0x00, 0x7c, 0x5e, 0x5e, 0x5c, 0x5c, 0x5c, 0x44, 0x7c, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x74, 0x54, 0x54, 0x7c, 0x78, 0x00, 0x00, 0x7e, 0x7e, 0x48, 0x48, 0x78, 0x30, 0x00, 0x00, 0x38, 0x7c, 0x44, 0x44, 0x44, 0x00, 0x00, 0x00, 0x30, 0x78, 0x48, 0x48, 0x7e, 0x7e, 0x00, 0x00, 0x38, 0x7c, 0x54, 0x54, 0x5c, 0x18, 0x00, 0x00, 0x00, 0x08, 0x7c, 0x7e, 0x0a, 0x0a, 0x00, 0x00, 0x98, 0xbc, 0xa4, 0xa4, 0xfc, 0x7c, 0x00, 0x00, 0x7e, 0x7e, 0x08, 0x08, 0x78, 0x70, 0x00, 0x00, 0x00, 0x48, 0x7a, 0x7a, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0xfa, 0x7a, 0x00, 0x00, 0x7e, 0x7e, 0x10, 0x38, 0x68, 0x40, 0x00, 0x00, 0x00, 0x42, 0x7e, 0x7e, 0x40, 0x00, 0x00, 0x00, 0x7c, 0x18, 0x18, 0x38, 0x1c, 0x1c, 0x78, 0x00, 0x7c, 0x7c, 0x04, 0x04, 0x7c, 0x78, 0x00, 0x00, 0x38, 0x7c, 0x44, 0x44, 0x7c, 0x38, 0x00, 0x00, 0xfc, 0xfc, 0x24, 0x24, 0x3c, 0x18, 0x00, 0x00, 0x18, 0x3c, 0x24, 0x24, 0xfc, 0xfc, 0x00, 0x00, 0x7c, 0x7c, 0x04, 0x04, 0x0c, 0x08, 0x00, 0x00, 0x48, 0x5c, 0x54, 0x54, 0x74, 0x24, 0x00, 0x00, 0x04, 0x04, 0x3e, 0x7e, 0x44, 0x44, 0x00, 0x00, 0x3c, 0x7c, 0x40, 0x40, 0x7c, 0x7c, 0x00, 0x00, 0x1c, 0x3c, 0x60, 0x60, 0x3c, 0x1c, 0x00, 0x00, 0x1c, 0x7c, 0x70, 0x38, 0x70, 0x7c, 0x1c, 0x00, 0x44, 0x6c, 0x38, 0x38, 0x6c, 0x44, 0x00, 0x00, 0x9c, 0xbc, 0xa0, 0xe0, 0x7c, 0x3c, 0x00, 0x00, 0x44, 0x64, 0x74, 0x5c, 0x4c, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xc1, 0xf1, 0x3d, 0x3d, 0xf1, 0xc1, 0x01, 0x01, 0xfd, 0xfd, 0xcd, 0xcd, 0x79, 0x31, 0x01, 0x01, 0xf1, 0xf9, 0x0d, 0x0d, 0x39, 0x31, 0x01, 0x01, 0xfd, 0xfd, 0x0d, 0x39, 0xf1, 0xc1, 0x01, 0x01, 0xfd, 0xfd, 0xcd, 0xcd, 0xcd, 0x0d, 0x01, 0x01, 0xfd, 0xfd, 0xcd, 0xcd, 0xcd, 0x0d, 0x01, 0x01, 0xf1, 0xf9, 0x0d, 0x0d, 0x0d, 0x0d, 0x01, 0x01, 0xfd, 0xfd, 0xc1, 0xc1, 0xfd, 0xfd, 0x01, 0x01, 0x0d, 0x0d, 0xfd, 0xfd, 0x0d, 0x0d, 0x01, 0x01, 0x01, 0x01, 0x0d, 0x0d, 0xfd, 0xfd, 0x01, 0x01, 0xfd, 0xfd, 0xc1, 0xf1, 0x3d, 0x0d, 0x01, 0x01, 0xfd, 0xfd, 0x01, 0x01, 0x01, 0x01, 0x01, 0xf9, 0xfd, 0xf1, 0xc1, 0xf1, 0xfd, 0xf9, 0x01, 0x01, 0xfd, 0xfd, 0xf1, 0xc1, 0xfd, 0xfd, 0x01, 0x01, 0xf1, 0xf9, 0x0d, 0x0d, 0xf9, 0xf1, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xbf, 0xbf, 0x8c, 0x8c, 0xbf, 0xbf, 0x80, 0x80, 0xbf, 0xbf, 0xb0, 0xb0, 0x9f, 0x8e, 0x80, 0x80, 0x8f, 0x9f, 0xb0, 0xb0, 0x9c, 0x8c, 0x80, 0x80, 0xbf, 0xbf, 0xb0, 0x9c, 0x8f, 0x83, 0x80, 0x80, 0xbf, 0xbf, 0xb0, 0xb0, 0xb0, 0xb0, 0x80, 0x80, 0xbf, 0xbf, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x8f, 0x9f, 0xb0, 0xb0, 0xb3, 0x9f, 0x8e, 0x80, 0xbf, 0xbf, 0x80, 0x80, 0xbf, 0xbf, 0x80, 0x80, 0xb0, 0xb0, 0xbf, 0xbf, 0xb0, 0xb0, 0x80, 0x80, 0x8c, 0x98, 0xb0, 0xb0, 0x9f, 0x8f, 0x80, 0x80, 0xbf, 0xbf, 0x83, 0x8f, 0xbc, 0xb0, 0x80, 0x80, 0xbf, 0xbf, 0xb0, 0xb0, 0xb0, 0xb0, 0x80, 0xbf, 0xbf, 0x80, 0x83, 0x80, 0xbf, 0xbf, 0x80, 0x80, 0xbf, 0xbf, 0x83, 0x8f, 0xbf, 0xbf, 0x80, 0x80, 0x8f, 0x9f, 0xb0, 0xb0, 0x9f, 0x8f, 0x80, 0x01, 0x01, 0xfd, 0xfd, 0x0d, 0x0d, 0xf9, 0xf1, 0x01, 0x01, 0xf1, 0xf9, 0x0d, 0x0d, 0xf9, 0xf1, 0x01, 0x01, 0xfd, 0xfd, 0x0d, 0x0d, 0xf9, 0x71, 0x01, 0x01, 0x31, 0x79, 0xcd, 0xcd, 0x8d, 0x05, 0x01, 0x01, 0x0d, 0x0d, 0xfd, 0xfd, 0x0d, 0x0d, 0x01, 0x01, 0xf9, 0xfd, 0x01, 0x01, 0xfd, 0xf9, 0x01, 0x01, 0xf9, 0xfd, 0x01, 0x01, 0xfd, 0xf9, 0x01, 0x01, 0xf9, 0xfd, 0x01, 0xc1, 0x01, 0xfd, 0xf9, 0x01, 0x3d, 0xfd, 0xc1, 0xc1, 0xfd, 0x3d, 0x01, 0x01, 0x3d, 0x7d, 0xc1, 0xc1, 0x7d, 0x3d, 0x01, 0x01, 0x09, 0x8d, 0xcd, 0xed, 0x7d, 0x3d, 0x81, 0xc1, 0xe1, 0xf1, 0xf9, 0xfd, 0x01, 0x01, 0x01, 0x01, 0x81, 0xc1, 0xe1, 0xf1, 0xf9, 0xfd, 0x01, 0x01, 0xfd, 0xf9, 0xf1, 0xe1, 0xc1, 0x81, 0xfd, 0xf9, 0xf1, 0xe1, 0xc1, 0x81, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x80, 0xbf, 0xbf, 0x83, 0x83, 0x81, 0x80, 0x80, 0x80, 0x8f, 0x9f, 0xb0, 0x8c, 0xbf, 0xb3, 0x80, 0x80, 0xbf, 0xbf, 0x83, 0x8f, 0xbd, 0xb0, 0x80, 0x80, 0xa0, 0xb0, 0xb0, 0xb0, 0x9f, 0x8f, 0x80, 0x80, 0x80, 0x80, 0xbf, 0xbf, 0x80, 0x80, 0x80, 0x80, 0x9f, 0xbf, 0xb0, 0xb0, 0xbf, 0x9f, 0x80, 0x80, 0x83, 0x8f, 0xbc, 0xbc, 0x8f, 0x83, 0x80, 0x80, 0xbf, 0xbf, 0x8f, 0x83, 0x8f, 0xbf, 0xbf, 0x80, 0xbc, 0xbf, 0x83, 0x83, 0xbf, 0xbc, 0x80, 0x80, 0x80, 0x80, 0xbf, 0xbf, 0x80, 0x80, 0x80, 0x80, 0xbc, 0xbf, 0xb3, 0xb1, 0xb0, 0x90, 0x80, 0x81, 0x83, 0x87, 0x8f, 0x9f, 0xbf, 0x80, 0x80, 0x80, 0x80, 0x81, 0x83, 0x87, 0x8f, 0x9f, 0xbf, 0x80, 0x80, 0xbf, 0x9f, 0x8f, 0x87, 0x83, 0x81, 0xbf, 0x9f, 0x8f, 0x87, 0x83, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 68 | 69 | }; 70 | 71 | const uint8_t font4x8[] PROGMEM = { //The 4x8 text font 72 | 73 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x7e, 0x24, 0x7e, 0x00, 0x24, 0xcb, 0x34, 0x00, 0x62, 0x18, 0x46, 0x00, 0x3a, 0x65, 0x5a, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x00, 0x42, 0x3c, 0x00, 0x00, 0x2a, 0x1c, 0x2a, 0x00, 0x08, 0x3e, 0x08, 0x00, 0x80, 0x60, 0x00, 0x00, 0x08, 0x08, 0x08, 0x00, 0x00, 0x60, 0x00, 0x00, 0x60, 0x18, 0x06, 0x00, 0x3c, 0x4a, 0x3c, 0x00, 0x44, 0x7e, 0x40, 0x00, 0x64, 0x52, 0x4c, 0x00, 0x22, 0x4a, 0x36, 0x00, 0x18, 0x14, 0x7e, 0x00, 0x2e, 0x4a, 0x32, 0x00, 0x3c, 0x4a, 0x32, 0x00, 0x02, 0x72, 0x0e, 0x00, 0x34, 0x4a, 0x34, 0x00, 0x4c, 0x52, 0x3c, 0x00, 0x00, 0x24, 0x00, 0x00, 0x40, 0x24, 0x00, 0x00, 0x10, 0x28, 0x44, 0x00, 0x14, 0x14, 0x14, 0x00, 0x44, 0x28, 0x10, 0x00, 0x04, 0x52, 0x0c, 0x00, 0x3c, 0x42, 0x4c, 0x00, 0x7c, 0x12, 0x7c, 0x00, 0x7e, 0x4a, 0x34, 0x00, 0x3c, 0x42, 0x24, 0x00, 0x7e, 0x42, 0x3c, 0x00, 0x7e, 0x4a, 0x4a, 0x00, 0x7e, 0x0a, 0x0a, 0x00, 0x3c, 0x42, 0x34, 0x00, 0x7e, 0x08, 0x7e, 0x00, 0x42, 0x7e, 0x42, 0x00, 0x20, 0x40, 0x3e, 0x00, 0x7e, 0x08, 0x76, 0x00, 0x7e, 0x40, 0x40, 0x00, 0x7e, 0x04, 0x7e, 0x00, 0x7c, 0x18, 0x3e, 0x00, 0x3c, 0x42, 0x3c, 0x00, 0x7e, 0x12, 0x0c, 0x00, 0x3c, 0x62, 0x5c, 0x00, 0x7e, 0x12, 0x6c, 0x00, 0x24, 0x4a, 0x34, 0x00, 0x02, 0x7e, 0x02, 0x00, 0x7e, 0x40, 0x7e, 0x00, 0x3e, 0x40, 0x3e, 0x00, 0x7e, 0x20, 0x7e, 0x00, 0x76, 0x08, 0x76, 0x00, 0x06, 0x78, 0x06, 0x00, 0x62, 0x5a, 0x46, 0x00, 0x00, 0x7e, 0x42, 0x00, 0x06, 0x18, 0x60, 0x00, 0x42, 0x7e, 0x00, 0x00, 0x04, 0x02, 0x04, 0x00, 0x80, 0x80, 0x80, 0x80, 0x02, 0x04, 0x00, 0x00, 0x24, 0x54, 0x78, 0x00, 0x7e, 0x48, 0x30, 0x00, 0x38, 0x44, 0x44, 0x00, 0x30, 0x48, 0x7e, 0x00, 0x38, 0x54, 0x58, 0x00, 0x08, 0x7c, 0x0a, 0x00, 0x98, 0xa4, 0x7c, 0x00, 0x7e, 0x08, 0x70, 0x00, 0x48, 0x7a, 0x40, 0x00, 0x80, 0x88, 0x7a, 0x00, 0x7e, 0x10, 0x68, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7c, 0x08, 0x7c, 0x00, 0x7c, 0x04, 0x78, 0x00, 0x38, 0x44, 0x38, 0x00, 0xfc, 0x24, 0x18, 0x00, 0x18, 0x24, 0xfc, 0x00, 0x78, 0x04, 0x04, 0x00, 0x48, 0x54, 0x24, 0x00, 0x08, 0x7e, 0x08, 0x00, 0x7c, 0x40, 0x7c, 0x00, 0x3c, 0x40, 0x3c, 0x00, 0x7c, 0x20, 0x7c, 0x00, 0x6c, 0x10, 0x6c, 0x00, 0x9c, 0xa0, 0x7c, 0x00, 0x64, 0x54, 0x4c, 0x00, 0x08, 0x36, 0x41, 0x00, 0x00, 0x77, 0x00, 0x00, 0x41, 0x36, 0x08, 0x00, 0x04, 0x0c, 0x08, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 74 | 75 | }; 76 | -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_03/graphics/Menu Header Condensed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_03/graphics/Menu Header Condensed.png -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_03/graphics/Menu Header Condensed.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_03/graphics/Menu Header Condensed.psd -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_03/graphics/Menu header.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_03/graphics/Menu header.psd -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_03/graphics/Tall Font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_03/graphics/Tall Font.png -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_03/graphics/Tall Font.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_03/graphics/Tall Font.psd -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_03/graphics/atari font 4x8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_03/graphics/atari font 4x8.png -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_03/graphics/atari font 4x8.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_03/graphics/atari font 4x8.psd -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_03/graphics/atari font 8x8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_03/graphics/atari font 8x8.png -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_03/graphics/atari font 8x8.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_03/graphics/atari font 8x8.psd -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_03/graphics/atari-small.bdf: -------------------------------------------------------------------------------- 1 | STARTFONT 2.1 2 | COMMENT 3 | COMMENT Copyright (c) 1999, Thomas A. Fine 4 | COMMENT 5 | COMMENT License to copy, modify, and distribute for both commercial and 6 | COMMENT non-commercial use is herby granted, provided this notice 7 | COMMENT is preserved. 8 | COMMENT 9 | COMMENT Email to my last name at head.cfa.harvard.edu 10 | COMMENT http://hea-www.harvard.edu/~fine/ 11 | COMMENT 12 | COMMENT Produced with bdfedit, a tcl/tk font editing program 13 | COMMENT written by Thomas A. Fine 14 | COMMENT 15 | FONT -atari-small 16 | SIZE 11 75 75 17 | FONTBOUNDINGBOX 4 8 0 -1 18 | STARTPROPERTIES 19 19 | FONTNAME_REGISTRY "" 20 | FOUNDRY "Misc" 21 | FAMILY_NAME "Fixed" 22 | WEIGHT_NAME "Medium" 23 | SLANT "R" 24 | SETWIDTH_NAME "Normal" 25 | ADD_STYLE_NAME "" 26 | PIXEL_SIZE 8 27 | POINT_SIZE 80 28 | RESOLUTION_X 75 29 | RESOLUTION_Y 75 30 | SPACING "C" 31 | AVERAGE_WIDTH 50 32 | CHARSET_REGISTRY "ISO8859" 33 | CHARSET_ENCODING "1" 34 | FONT_DESCENT 1 35 | FONT_ASCENT 7 36 | COPYRIGHT "Copyright 1999 by Thomas A. Fine" 37 | DEFAULT_CHAR 0 38 | ENDPROPERTIES 39 | CHARS 128 40 | STARTCHAR C000 41 | ENCODING 0 42 | SWIDTH 1 0 43 | DWIDTH 4 0 44 | BBX 4 8 0 -1 45 | BITMAP 46 | 00 47 | 00 48 | 00 49 | 00 50 | 00 51 | 00 52 | 00 53 | 00 54 | ENDCHAR 55 | STARTCHAR C001 56 | ENCODING 1 57 | SWIDTH 1 0 58 | DWIDTH 4 0 59 | BBX 4 8 0 -1 60 | BITMAP 61 | 00 62 | 20 63 | 70 64 | f0 65 | 70 66 | 20 67 | 00 68 | 00 69 | ENDCHAR 70 | STARTCHAR C002 71 | ENCODING 2 72 | SWIDTH 1 0 73 | DWIDTH 4 0 74 | BBX 4 8 0 -1 75 | BITMAP 76 | 00 77 | 20 78 | 50 79 | 20 80 | 50 81 | 20 82 | 50 83 | 20 84 | ENDCHAR 85 | STARTCHAR C003 86 | ENCODING 3 87 | SWIDTH 1 0 88 | DWIDTH 4 0 89 | BBX 4 8 0 -1 90 | BITMAP 91 | 50 92 | 50 93 | 70 94 | 50 95 | 50 96 | 30 97 | 10 98 | 10 99 | ENDCHAR 100 | STARTCHAR C004 101 | ENCODING 4 102 | SWIDTH 1 0 103 | DWIDTH 4 0 104 | BBX 4 8 0 -1 105 | BITMAP 106 | e0 107 | 80 108 | c0 109 | b0 110 | a0 111 | 30 112 | 20 113 | 20 114 | ENDCHAR 115 | STARTCHAR C005 116 | ENCODING 5 117 | SWIDTH 1 0 118 | DWIDTH 4 0 119 | BBX 4 8 0 -1 120 | BITMAP 121 | 60 122 | 80 123 | 60 124 | 00 125 | 30 126 | 20 127 | 30 128 | 20 129 | ENDCHAR 130 | STARTCHAR C006 131 | ENCODING 6 132 | SWIDTH 1 0 133 | DWIDTH 4 0 134 | BBX 4 8 0 -1 135 | BITMAP 136 | 80 137 | 80 138 | 80 139 | e0 140 | 30 141 | 20 142 | 30 143 | 20 144 | ENDCHAR 145 | STARTCHAR C007 146 | ENCODING 7 147 | SWIDTH 1 0 148 | DWIDTH 4 0 149 | BBX 4 8 0 -1 150 | BITMAP 151 | 00 152 | 70 153 | 50 154 | 50 155 | 70 156 | 00 157 | 00 158 | 00 159 | ENDCHAR 160 | STARTCHAR C010 161 | ENCODING 8 162 | SWIDTH 1 0 163 | DWIDTH 4 0 164 | BBX 4 8 0 -1 165 | BITMAP 166 | 00 167 | 20 168 | 70 169 | 20 170 | 00 171 | 70 172 | 00 173 | 00 174 | ENDCHAR 175 | STARTCHAR C011 176 | ENCODING 9 177 | SWIDTH 1 0 178 | DWIDTH 4 0 179 | BBX 4 8 0 -1 180 | BITMAP 181 | 90 182 | d0 183 | b0 184 | 90 185 | 20 186 | 20 187 | 20 188 | 30 189 | ENDCHAR 190 | STARTCHAR C012 191 | ENCODING 10 192 | SWIDTH 1 0 193 | DWIDTH 4 0 194 | BBX 4 8 0 -1 195 | BITMAP 196 | a0 197 | a0 198 | a0 199 | 40 200 | 30 201 | 10 202 | 10 203 | 10 204 | ENDCHAR 205 | STARTCHAR C013 206 | ENCODING 11 207 | SWIDTH 1 0 208 | DWIDTH 4 0 209 | BBX 4 8 0 -1 210 | BITMAP 211 | 20 212 | 20 213 | 20 214 | e0 215 | 00 216 | 00 217 | 00 218 | 00 219 | ENDCHAR 220 | STARTCHAR C014 221 | ENCODING 12 222 | SWIDTH 1 0 223 | DWIDTH 4 0 224 | BBX 4 8 0 -1 225 | BITMAP 226 | 00 227 | 00 228 | 00 229 | e0 230 | 20 231 | 20 232 | 20 233 | 20 234 | ENDCHAR 235 | STARTCHAR C015 236 | ENCODING 13 237 | SWIDTH 1 0 238 | DWIDTH 4 0 239 | BBX 4 8 0 -1 240 | BITMAP 241 | 00 242 | 00 243 | 00 244 | 30 245 | 20 246 | 20 247 | 20 248 | 20 249 | ENDCHAR 250 | STARTCHAR C016 251 | ENCODING 14 252 | SWIDTH 1 0 253 | DWIDTH 4 0 254 | BBX 4 8 0 -1 255 | BITMAP 256 | 20 257 | 20 258 | 20 259 | 30 260 | 00 261 | 00 262 | 00 263 | 00 264 | ENDCHAR 265 | STARTCHAR C017 266 | ENCODING 15 267 | SWIDTH 1 0 268 | DWIDTH 4 0 269 | BBX 4 8 0 -1 270 | BITMAP 271 | 20 272 | 20 273 | 20 274 | f0 275 | 20 276 | 20 277 | 20 278 | 20 279 | ENDCHAR 280 | STARTCHAR C020 281 | ENCODING 16 282 | SWIDTH 1 0 283 | DWIDTH 4 0 284 | BBX 4 8 0 -1 285 | BITMAP 286 | 00 287 | 70 288 | 00 289 | 00 290 | 00 291 | 00 292 | 00 293 | 00 294 | ENDCHAR 295 | STARTCHAR C021 296 | ENCODING 17 297 | SWIDTH 1 0 298 | DWIDTH 4 0 299 | BBX 4 8 0 -1 300 | BITMAP 301 | 00 302 | 00 303 | 70 304 | 00 305 | 00 306 | 00 307 | 00 308 | 00 309 | ENDCHAR 310 | STARTCHAR C022 311 | ENCODING 18 312 | SWIDTH 1 0 313 | DWIDTH 4 0 314 | BBX 4 8 0 -1 315 | BITMAP 316 | 00 317 | 00 318 | 00 319 | 70 320 | 00 321 | 00 322 | 00 323 | 00 324 | ENDCHAR 325 | STARTCHAR C023 326 | ENCODING 19 327 | SWIDTH 1 0 328 | DWIDTH 4 0 329 | BBX 4 8 0 -1 330 | BITMAP 331 | 00 332 | 00 333 | 00 334 | 00 335 | 70 336 | 00 337 | 00 338 | 00 339 | ENDCHAR 340 | STARTCHAR C024 341 | ENCODING 20 342 | SWIDTH 1 0 343 | DWIDTH 4 0 344 | BBX 4 8 0 -1 345 | BITMAP 346 | 00 347 | 00 348 | 00 349 | 00 350 | 00 351 | 70 352 | 00 353 | 00 354 | ENDCHAR 355 | STARTCHAR C025 356 | ENCODING 21 357 | SWIDTH 1 0 358 | DWIDTH 4 0 359 | BBX 4 8 0 -1 360 | BITMAP 361 | 20 362 | 20 363 | 20 364 | 30 365 | 20 366 | 20 367 | 20 368 | 20 369 | ENDCHAR 370 | STARTCHAR C026 371 | ENCODING 22 372 | SWIDTH 1 0 373 | DWIDTH 4 0 374 | BBX 4 8 0 -1 375 | BITMAP 376 | 20 377 | 20 378 | 20 379 | e0 380 | 20 381 | 20 382 | 20 383 | 20 384 | ENDCHAR 385 | STARTCHAR C027 386 | ENCODING 23 387 | SWIDTH 1 0 388 | DWIDTH 4 0 389 | BBX 4 8 0 -1 390 | BITMAP 391 | 20 392 | 20 393 | 20 394 | 20 395 | f0 396 | 00 397 | 00 398 | 00 399 | ENDCHAR 400 | STARTCHAR C030 401 | ENCODING 24 402 | SWIDTH 1 0 403 | DWIDTH 4 0 404 | BBX 4 8 0 -1 405 | BITMAP 406 | 00 407 | 00 408 | 00 409 | 00 410 | f0 411 | 20 412 | 20 413 | 20 414 | ENDCHAR 415 | STARTCHAR C031 416 | ENCODING 25 417 | SWIDTH 1 0 418 | DWIDTH 4 0 419 | BBX 4 8 0 -1 420 | BITMAP 421 | 20 422 | 20 423 | 20 424 | 20 425 | 20 426 | 20 427 | 20 428 | 20 429 | ENDCHAR 430 | STARTCHAR C032 431 | ENCODING 26 432 | SWIDTH 1 0 433 | DWIDTH 4 0 434 | BBX 4 8 0 -1 435 | BITMAP 436 | 00 437 | 10 438 | 20 439 | 40 440 | 20 441 | 10 442 | 70 443 | 00 444 | ENDCHAR 445 | STARTCHAR C033 446 | ENCODING 27 447 | SWIDTH 1 0 448 | DWIDTH 4 0 449 | BBX 4 8 0 -1 450 | BITMAP 451 | 00 452 | 40 453 | 20 454 | 10 455 | 20 456 | 40 457 | 70 458 | 00 459 | ENDCHAR 460 | STARTCHAR C034 461 | ENCODING 28 462 | SWIDTH 1 0 463 | DWIDTH 4 0 464 | BBX 4 8 0 -1 465 | BITMAP 466 | 00 467 | f0 468 | 50 469 | 50 470 | 50 471 | 50 472 | 00 473 | 00 474 | ENDCHAR 475 | STARTCHAR C035 476 | ENCODING 29 477 | SWIDTH 1 0 478 | DWIDTH 4 0 479 | BBX 4 8 0 -1 480 | BITMAP 481 | 00 482 | 10 483 | f0 484 | 20 485 | f0 486 | 40 487 | 00 488 | 00 489 | ENDCHAR 490 | STARTCHAR C036 491 | ENCODING 30 492 | SWIDTH 1 0 493 | DWIDTH 4 0 494 | BBX 4 8 0 -1 495 | BITMAP 496 | 30 497 | 40 498 | e0 499 | 40 500 | 70 501 | d0 502 | 40 503 | 00 504 | ENDCHAR 505 | STARTCHAR C037 506 | ENCODING 31 507 | SWIDTH 1 0 508 | DWIDTH 4 0 509 | BBX 4 8 0 -1 510 | BITMAP 511 | 00 512 | 00 513 | 00 514 | 20 515 | 00 516 | 00 517 | 00 518 | 00 519 | ENDCHAR 520 | STARTCHAR C040 521 | ENCODING 32 522 | SWIDTH 1 0 523 | DWIDTH 4 0 524 | BBX 4 8 0 -1 525 | BITMAP 526 | 00 527 | 00 528 | 00 529 | 00 530 | 00 531 | 00 532 | 00 533 | 00 534 | ENDCHAR 535 | STARTCHAR ! 536 | ENCODING 33 537 | SWIDTH 1 0 538 | DWIDTH 4 0 539 | BBX 4 8 0 -1 540 | BITMAP 541 | 00 542 | 40 543 | 40 544 | 40 545 | 40 546 | 00 547 | 40 548 | 00 549 | ENDCHAR 550 | STARTCHAR " 551 | ENCODING 34 552 | SWIDTH 1 0 553 | DWIDTH 4 0 554 | BBX 4 8 0 -1 555 | BITMAP 556 | 00 557 | A0 558 | A0 559 | 00 560 | 00 561 | 00 562 | 00 563 | 00 564 | ENDCHAR 565 | STARTCHAR # 566 | ENCODING 35 567 | SWIDTH 1 0 568 | DWIDTH 4 0 569 | BBX 4 8 0 -1 570 | BITMAP 571 | 00 572 | a0 573 | E0 574 | A0 575 | A0 576 | E0 577 | a0 578 | 00 579 | ENDCHAR 580 | STARTCHAR $ 581 | ENCODING 36 582 | SWIDTH 1 0 583 | DWIDTH 4 0 584 | BBX 4 8 0 -1 585 | BITMAP 586 | 40 587 | 40 588 | a0 589 | 40 590 | 20 591 | a0 592 | 40 593 | 40 594 | ENDCHAR 595 | STARTCHAR % 596 | ENCODING 37 597 | SWIDTH 1 0 598 | DWIDTH 4 0 599 | BBX 4 8 0 -1 600 | BITMAP 601 | 00 602 | a0 603 | 20 604 | 40 605 | 40 606 | 80 607 | a0 608 | 00 609 | ENDCHAR 610 | STARTCHAR & 611 | ENCODING 38 612 | SWIDTH 1 0 613 | DWIDTH 4 0 614 | BBX 4 8 0 -1 615 | BITMAP 616 | 40 617 | a0 618 | 40 619 | a0 620 | a0 621 | c0 622 | 60 623 | 00 624 | ENDCHAR 625 | STARTCHAR ' 626 | ENCODING 39 627 | SWIDTH 1 0 628 | DWIDTH 4 0 629 | BBX 4 8 0 -1 630 | BITMAP 631 | 00 632 | 40 633 | 40 634 | 00 635 | 00 636 | 00 637 | 00 638 | 00 639 | ENDCHAR 640 | STARTCHAR ( 641 | ENCODING 40 642 | SWIDTH 1 0 643 | DWIDTH 4 0 644 | BBX 4 8 0 -1 645 | BITMAP 646 | 00 647 | 20 648 | 40 649 | 40 650 | 40 651 | 40 652 | 20 653 | 00 654 | ENDCHAR 655 | STARTCHAR ) 656 | ENCODING 41 657 | SWIDTH 1 0 658 | DWIDTH 4 0 659 | BBX 4 8 0 -1 660 | BITMAP 661 | 00 662 | 80 663 | 40 664 | 40 665 | 40 666 | 40 667 | 80 668 | 00 669 | ENDCHAR 670 | STARTCHAR * 671 | ENCODING 42 672 | SWIDTH 1 0 673 | DWIDTH 4 0 674 | BBX 4 8 0 -1 675 | BITMAP 676 | 00 677 | a0 678 | 40 679 | e0 680 | 40 681 | a0 682 | 00 683 | 00 684 | ENDCHAR 685 | STARTCHAR + 686 | ENCODING 43 687 | SWIDTH 1 0 688 | DWIDTH 4 0 689 | BBX 4 8 0 -1 690 | BITMAP 691 | 00 692 | 40 693 | 40 694 | e0 695 | 40 696 | 40 697 | 00 698 | 00 699 | ENDCHAR 700 | STARTCHAR , 701 | ENCODING 44 702 | SWIDTH 1 0 703 | DWIDTH 4 0 704 | BBX 4 8 0 -1 705 | BITMAP 706 | 00 707 | 00 708 | 00 709 | 00 710 | 00 711 | 40 712 | 40 713 | 80 714 | ENDCHAR 715 | STARTCHAR - 716 | ENCODING 45 717 | SWIDTH 1 0 718 | DWIDTH 4 0 719 | BBX 4 8 0 -1 720 | BITMAP 721 | 00 722 | 00 723 | 00 724 | e0 725 | 00 726 | 00 727 | 00 728 | 00 729 | ENDCHAR 730 | STARTCHAR . 731 | ENCODING 46 732 | SWIDTH 1 0 733 | DWIDTH 4 0 734 | BBX 4 8 0 -1 735 | BITMAP 736 | 00 737 | 00 738 | 00 739 | 00 740 | 00 741 | 40 742 | 40 743 | 00 744 | ENDCHAR 745 | STARTCHAR / 746 | ENCODING 47 747 | SWIDTH 1 0 748 | DWIDTH 4 0 749 | BBX 4 8 0 -1 750 | BITMAP 751 | 00 752 | 20 753 | 20 754 | 40 755 | 40 756 | 80 757 | 80 758 | 00 759 | ENDCHAR 760 | STARTCHAR 0 761 | ENCODING 48 762 | SWIDTH 1 0 763 | DWIDTH 4 0 764 | BBX 4 8 0 -1 765 | BITMAP 766 | 00 767 | 40 768 | a0 769 | e0 770 | a0 771 | a0 772 | 40 773 | 00 774 | ENDCHAR 775 | STARTCHAR 1 776 | ENCODING 49 777 | SWIDTH 1 0 778 | DWIDTH 4 0 779 | BBX 4 8 0 -1 780 | BITMAP 781 | 00 782 | 40 783 | c0 784 | 40 785 | 40 786 | 40 787 | e0 788 | 00 789 | ENDCHAR 790 | STARTCHAR 2 791 | ENCODING 50 792 | SWIDTH 1 0 793 | DWIDTH 4 0 794 | BBX 4 8 0 -1 795 | BITMAP 796 | 00 797 | 40 798 | a0 799 | 20 800 | 40 801 | 80 802 | e0 803 | 00 804 | ENDCHAR 805 | STARTCHAR 3 806 | ENCODING 51 807 | SWIDTH 1 0 808 | DWIDTH 4 0 809 | BBX 4 8 0 -1 810 | BITMAP 811 | 00 812 | e0 813 | 20 814 | 40 815 | 20 816 | a0 817 | 40 818 | 00 819 | ENDCHAR 820 | STARTCHAR 4 821 | ENCODING 52 822 | SWIDTH 1 0 823 | DWIDTH 4 0 824 | BBX 4 8 0 -1 825 | BITMAP 826 | 00 827 | 20 828 | 60 829 | a0 830 | e0 831 | 20 832 | 20 833 | 00 834 | ENDCHAR 835 | STARTCHAR 5 836 | ENCODING 53 837 | SWIDTH 1 0 838 | DWIDTH 4 0 839 | BBX 4 8 0 -1 840 | BITMAP 841 | 00 842 | e0 843 | 80 844 | c0 845 | 20 846 | a0 847 | 40 848 | 00 849 | ENDCHAR 850 | STARTCHAR 6 851 | ENCODING 54 852 | SWIDTH 1 0 853 | DWIDTH 4 0 854 | BBX 4 8 0 -1 855 | BITMAP 856 | 00 857 | 60 858 | 80 859 | c0 860 | a0 861 | a0 862 | 40 863 | 00 864 | ENDCHAR 865 | STARTCHAR 7 866 | ENCODING 55 867 | SWIDTH 1 0 868 | DWIDTH 4 0 869 | BBX 4 8 0 -1 870 | BITMAP 871 | 00 872 | e0 873 | 20 874 | 20 875 | 40 876 | 40 877 | 40 878 | 00 879 | ENDCHAR 880 | STARTCHAR 8 881 | ENCODING 56 882 | SWIDTH 1 0 883 | DWIDTH 4 0 884 | BBX 4 8 0 -1 885 | BITMAP 886 | 00 887 | 40 888 | a0 889 | 40 890 | a0 891 | a0 892 | 40 893 | 00 894 | ENDCHAR 895 | STARTCHAR 9 896 | ENCODING 57 897 | SWIDTH 1 0 898 | DWIDTH 4 0 899 | BBX 4 8 0 -1 900 | BITMAP 901 | 00 902 | 40 903 | a0 904 | a0 905 | 60 906 | 20 907 | c0 908 | 00 909 | ENDCHAR 910 | STARTCHAR : 911 | ENCODING 58 912 | SWIDTH 1 0 913 | DWIDTH 4 0 914 | BBX 4 8 0 -1 915 | BITMAP 916 | 00 917 | 00 918 | 40 919 | 00 920 | 00 921 | 40 922 | 00 923 | 00 924 | ENDCHAR 925 | STARTCHAR ; 926 | ENCODING 59 927 | SWIDTH 1 0 928 | DWIDTH 4 0 929 | BBX 4 8 0 -1 930 | BITMAP 931 | 00 932 | 00 933 | 40 934 | 00 935 | 00 936 | 40 937 | 80 938 | 00 939 | ENDCHAR 940 | STARTCHAR < 941 | ENCODING 60 942 | SWIDTH 1 0 943 | DWIDTH 4 0 944 | BBX 4 8 0 -1 945 | BITMAP 946 | 00 947 | 00 948 | 20 949 | 40 950 | 80 951 | 40 952 | 20 953 | 00 954 | ENDCHAR 955 | STARTCHAR = 956 | ENCODING 61 957 | SWIDTH 1 0 958 | DWIDTH 4 0 959 | BBX 4 8 0 -1 960 | BITMAP 961 | 00 962 | 00 963 | e0 964 | 00 965 | e0 966 | 00 967 | 00 968 | 00 969 | ENDCHAR 970 | STARTCHAR > 971 | ENCODING 62 972 | SWIDTH 1 0 973 | DWIDTH 4 0 974 | BBX 4 8 0 -1 975 | BITMAP 976 | 00 977 | 00 978 | 80 979 | 40 980 | 20 981 | 40 982 | 80 983 | 00 984 | ENDCHAR 985 | STARTCHAR ? 986 | ENCODING 63 987 | SWIDTH 1 0 988 | DWIDTH 4 0 989 | BBX 4 8 0 -1 990 | BITMAP 991 | 00 992 | 40 993 | a0 994 | 20 995 | 40 996 | 00 997 | 40 998 | 00 999 | ENDCHAR 1000 | STARTCHAR @ 1001 | ENCODING 64 1002 | SWIDTH 1 0 1003 | DWIDTH 4 0 1004 | BBX 4 8 0 -1 1005 | BITMAP 1006 | 00 1007 | 40 1008 | a0 1009 | a0 1010 | 80 1011 | 80 1012 | 60 1013 | 00 1014 | ENDCHAR 1015 | STARTCHAR A 1016 | ENCODING 65 1017 | SWIDTH 1 0 1018 | DWIDTH 4 0 1019 | BBX 4 8 0 -1 1020 | BITMAP 1021 | 00 1022 | 40 1023 | a0 1024 | a0 1025 | e0 1026 | a0 1027 | a0 1028 | 00 1029 | ENDCHAR 1030 | STARTCHAR B 1031 | ENCODING 66 1032 | SWIDTH 1 0 1033 | DWIDTH 4 0 1034 | BBX 4 8 0 -1 1035 | BITMAP 1036 | 00 1037 | c0 1038 | a0 1039 | c0 1040 | a0 1041 | a0 1042 | c0 1043 | 00 1044 | ENDCHAR 1045 | STARTCHAR C 1046 | ENCODING 67 1047 | SWIDTH 1 0 1048 | DWIDTH 4 0 1049 | BBX 4 8 0 -1 1050 | BITMAP 1051 | 00 1052 | 40 1053 | a0 1054 | 80 1055 | 80 1056 | a0 1057 | 40 1058 | 00 1059 | ENDCHAR 1060 | STARTCHAR D 1061 | ENCODING 68 1062 | SWIDTH 1 0 1063 | DWIDTH 4 0 1064 | BBX 4 8 0 -1 1065 | BITMAP 1066 | 00 1067 | c0 1068 | a0 1069 | a0 1070 | a0 1071 | a0 1072 | c0 1073 | 00 1074 | ENDCHAR 1075 | STARTCHAR E 1076 | ENCODING 69 1077 | SWIDTH 1 0 1078 | DWIDTH 4 0 1079 | BBX 4 8 0 -1 1080 | BITMAP 1081 | 00 1082 | e0 1083 | 80 1084 | e0 1085 | 80 1086 | 80 1087 | e0 1088 | 00 1089 | ENDCHAR 1090 | STARTCHAR F 1091 | ENCODING 70 1092 | SWIDTH 1 0 1093 | DWIDTH 4 0 1094 | BBX 4 8 0 -1 1095 | BITMAP 1096 | 00 1097 | e0 1098 | 80 1099 | e0 1100 | 80 1101 | 80 1102 | 80 1103 | 00 1104 | ENDCHAR 1105 | STARTCHAR G 1106 | ENCODING 71 1107 | SWIDTH 1 0 1108 | DWIDTH 4 0 1109 | BBX 4 8 0 -1 1110 | BITMAP 1111 | 00 1112 | 40 1113 | a0 1114 | 80 1115 | a0 1116 | a0 1117 | 40 1118 | 00 1119 | ENDCHAR 1120 | STARTCHAR H 1121 | ENCODING 72 1122 | SWIDTH 1 0 1123 | DWIDTH 4 0 1124 | BBX 4 8 0 -1 1125 | BITMAP 1126 | 00 1127 | a0 1128 | a0 1129 | e0 1130 | a0 1131 | a0 1132 | a0 1133 | 00 1134 | ENDCHAR 1135 | STARTCHAR I 1136 | ENCODING 73 1137 | SWIDTH 1 0 1138 | DWIDTH 4 0 1139 | BBX 4 8 0 -1 1140 | BITMAP 1141 | 00 1142 | e0 1143 | 40 1144 | 40 1145 | 40 1146 | 40 1147 | e0 1148 | 00 1149 | ENDCHAR 1150 | STARTCHAR J 1151 | ENCODING 74 1152 | SWIDTH 1 0 1153 | DWIDTH 4 0 1154 | BBX 4 8 0 -1 1155 | BITMAP 1156 | 00 1157 | 20 1158 | 20 1159 | 20 1160 | 20 1161 | a0 1162 | 40 1163 | 00 1164 | ENDCHAR 1165 | STARTCHAR K 1166 | ENCODING 75 1167 | SWIDTH 1 0 1168 | DWIDTH 4 0 1169 | BBX 4 8 0 -1 1170 | BITMAP 1171 | 00 1172 | a0 1173 | a0 1174 | c0 1175 | a0 1176 | a0 1177 | a0 1178 | 00 1179 | ENDCHAR 1180 | STARTCHAR L 1181 | ENCODING 76 1182 | SWIDTH 1 0 1183 | DWIDTH 4 0 1184 | BBX 4 8 0 -1 1185 | BITMAP 1186 | 00 1187 | 80 1188 | 80 1189 | 80 1190 | 80 1191 | 80 1192 | e0 1193 | 00 1194 | ENDCHAR 1195 | STARTCHAR M 1196 | ENCODING 77 1197 | SWIDTH 1 0 1198 | DWIDTH 4 0 1199 | BBX 4 8 0 -1 1200 | BITMAP 1201 | 00 1202 | a0 1203 | e0 1204 | a0 1205 | a0 1206 | a0 1207 | a0 1208 | 00 1209 | ENDCHAR 1210 | STARTCHAR N 1211 | ENCODING 78 1212 | SWIDTH 1 0 1213 | DWIDTH 4 0 1214 | BBX 4 8 0 -1 1215 | BITMAP 1216 | 00 1217 | 20 1218 | a0 1219 | e0 1220 | e0 1221 | a0 1222 | 80 1223 | 00 1224 | ENDCHAR 1225 | STARTCHAR O 1226 | ENCODING 79 1227 | SWIDTH 1 0 1228 | DWIDTH 4 0 1229 | BBX 4 8 0 -1 1230 | BITMAP 1231 | 00 1232 | 40 1233 | a0 1234 | a0 1235 | a0 1236 | a0 1237 | 40 1238 | 00 1239 | ENDCHAR 1240 | STARTCHAR P 1241 | ENCODING 80 1242 | SWIDTH 1 0 1243 | DWIDTH 4 0 1244 | BBX 4 8 0 -1 1245 | BITMAP 1246 | 00 1247 | c0 1248 | a0 1249 | a0 1250 | c0 1251 | 80 1252 | 80 1253 | 00 1254 | ENDCHAR 1255 | STARTCHAR Q 1256 | ENCODING 81 1257 | SWIDTH 1 0 1258 | DWIDTH 4 0 1259 | BBX 4 8 0 -1 1260 | BITMAP 1261 | 00 1262 | 40 1263 | a0 1264 | a0 1265 | a0 1266 | c0 1267 | 60 1268 | 00 1269 | ENDCHAR 1270 | STARTCHAR R 1271 | ENCODING 82 1272 | SWIDTH 1 0 1273 | DWIDTH 4 0 1274 | BBX 4 8 0 -1 1275 | BITMAP 1276 | 00 1277 | c0 1278 | a0 1279 | a0 1280 | c0 1281 | a0 1282 | a0 1283 | 00 1284 | ENDCHAR 1285 | STARTCHAR S 1286 | ENCODING 83 1287 | SWIDTH 1 0 1288 | DWIDTH 4 0 1289 | BBX 4 8 0 -1 1290 | BITMAP 1291 | 00 1292 | 40 1293 | a0 1294 | 40 1295 | 20 1296 | a0 1297 | 40 1298 | 00 1299 | ENDCHAR 1300 | STARTCHAR T 1301 | ENCODING 84 1302 | SWIDTH 1 0 1303 | DWIDTH 4 0 1304 | BBX 4 8 0 -1 1305 | BITMAP 1306 | 00 1307 | e0 1308 | 40 1309 | 40 1310 | 40 1311 | 40 1312 | 40 1313 | 00 1314 | ENDCHAR 1315 | STARTCHAR U 1316 | ENCODING 85 1317 | SWIDTH 1 0 1318 | DWIDTH 4 0 1319 | BBX 4 8 0 -1 1320 | BITMAP 1321 | 00 1322 | a0 1323 | a0 1324 | a0 1325 | a0 1326 | a0 1327 | e0 1328 | 00 1329 | ENDCHAR 1330 | STARTCHAR V 1331 | ENCODING 86 1332 | SWIDTH 1 0 1333 | DWIDTH 4 0 1334 | BBX 4 8 0 -1 1335 | BITMAP 1336 | 00 1337 | a0 1338 | a0 1339 | a0 1340 | a0 1341 | a0 1342 | 40 1343 | 00 1344 | ENDCHAR 1345 | STARTCHAR W 1346 | ENCODING 87 1347 | SWIDTH 1 0 1348 | DWIDTH 4 0 1349 | BBX 4 8 0 -1 1350 | BITMAP 1351 | 00 1352 | a0 1353 | a0 1354 | a0 1355 | a0 1356 | e0 1357 | a0 1358 | 00 1359 | ENDCHAR 1360 | STARTCHAR X 1361 | ENCODING 88 1362 | SWIDTH 1 0 1363 | DWIDTH 4 0 1364 | BBX 4 8 0 -1 1365 | BITMAP 1366 | 00 1367 | a0 1368 | a0 1369 | 40 1370 | a0 1371 | a0 1372 | a0 1373 | 00 1374 | ENDCHAR 1375 | STARTCHAR Y 1376 | ENCODING 89 1377 | SWIDTH 1 0 1378 | DWIDTH 4 0 1379 | BBX 4 8 0 -1 1380 | BITMAP 1381 | 00 1382 | a0 1383 | a0 1384 | 40 1385 | 40 1386 | 40 1387 | 40 1388 | 00 1389 | ENDCHAR 1390 | STARTCHAR Z 1391 | ENCODING 90 1392 | SWIDTH 1 0 1393 | DWIDTH 4 0 1394 | BBX 4 8 0 -1 1395 | BITMAP 1396 | 00 1397 | e0 1398 | 20 1399 | 40 1400 | 40 1401 | 80 1402 | e0 1403 | 00 1404 | ENDCHAR 1405 | STARTCHAR [ 1406 | ENCODING 91 1407 | SWIDTH 1 0 1408 | DWIDTH 4 0 1409 | BBX 4 8 0 -1 1410 | BITMAP 1411 | 00 1412 | 60 1413 | 40 1414 | 40 1415 | 40 1416 | 40 1417 | 60 1418 | 00 1419 | ENDCHAR 1420 | STARTCHAR \ 1421 | ENCODING 92 1422 | SWIDTH 1 0 1423 | DWIDTH 4 0 1424 | BBX 4 8 0 -1 1425 | BITMAP 1426 | 00 1427 | 80 1428 | 80 1429 | 40 1430 | 40 1431 | 20 1432 | 20 1433 | 00 1434 | ENDCHAR 1435 | STARTCHAR ] 1436 | ENCODING 93 1437 | SWIDTH 1 0 1438 | DWIDTH 4 0 1439 | BBX 4 8 0 -1 1440 | BITMAP 1441 | 00 1442 | c0 1443 | 40 1444 | 40 1445 | 40 1446 | 40 1447 | c0 1448 | 00 1449 | ENDCHAR 1450 | STARTCHAR ^ 1451 | ENCODING 94 1452 | SWIDTH 1 0 1453 | DWIDTH 4 0 1454 | BBX 4 8 0 -1 1455 | BITMAP 1456 | 00 1457 | 40 1458 | a0 1459 | 00 1460 | 00 1461 | 00 1462 | 00 1463 | 00 1464 | ENDCHAR 1465 | STARTCHAR _ 1466 | ENCODING 95 1467 | SWIDTH 1 0 1468 | DWIDTH 4 0 1469 | BBX 4 8 0 -1 1470 | BITMAP 1471 | 00 1472 | 00 1473 | 00 1474 | 00 1475 | 00 1476 | 00 1477 | 00 1478 | f0 1479 | ENDCHAR 1480 | STARTCHAR ` 1481 | ENCODING 96 1482 | SWIDTH 1 0 1483 | DWIDTH 4 0 1484 | BBX 4 8 0 -1 1485 | BITMAP 1486 | 00 1487 | 80 1488 | 40 1489 | 00 1490 | 00 1491 | 00 1492 | 00 1493 | 00 1494 | ENDCHAR 1495 | STARTCHAR a 1496 | ENCODING 97 1497 | SWIDTH 1 0 1498 | DWIDTH 4 0 1499 | BBX 4 8 0 -1 1500 | BITMAP 1501 | 00 1502 | 00 1503 | c0 1504 | 20 1505 | 60 1506 | a0 1507 | 60 1508 | 00 1509 | ENDCHAR 1510 | STARTCHAR b 1511 | ENCODING 98 1512 | SWIDTH 1 0 1513 | DWIDTH 4 0 1514 | BBX 4 8 0 -1 1515 | BITMAP 1516 | 00 1517 | 80 1518 | 80 1519 | c0 1520 | a0 1521 | a0 1522 | c0 1523 | 00 1524 | ENDCHAR 1525 | STARTCHAR c 1526 | ENCODING 99 1527 | SWIDTH 1 0 1528 | DWIDTH 4 0 1529 | BBX 4 8 0 -1 1530 | BITMAP 1531 | 00 1532 | 00 1533 | 60 1534 | 80 1535 | 80 1536 | 80 1537 | 60 1538 | 00 1539 | ENDCHAR 1540 | STARTCHAR d 1541 | ENCODING 100 1542 | SWIDTH 1 0 1543 | DWIDTH 4 0 1544 | BBX 4 8 0 -1 1545 | BITMAP 1546 | 00 1547 | 20 1548 | 20 1549 | 60 1550 | a0 1551 | a0 1552 | 60 1553 | 00 1554 | ENDCHAR 1555 | STARTCHAR e 1556 | ENCODING 101 1557 | SWIDTH 1 0 1558 | DWIDTH 4 0 1559 | BBX 4 8 0 -1 1560 | BITMAP 1561 | 00 1562 | 00 1563 | 40 1564 | a0 1565 | e0 1566 | 80 1567 | 60 1568 | 00 1569 | ENDCHAR 1570 | STARTCHAR f 1571 | ENCODING 102 1572 | SWIDTH 1 0 1573 | DWIDTH 4 0 1574 | BBX 4 8 0 -1 1575 | BITMAP 1576 | 00 1577 | 20 1578 | 40 1579 | e0 1580 | 40 1581 | 40 1582 | 40 1583 | 00 1584 | ENDCHAR 1585 | STARTCHAR g 1586 | ENCODING 103 1587 | SWIDTH 1 0 1588 | DWIDTH 4 0 1589 | BBX 4 8 0 -1 1590 | BITMAP 1591 | 00 1592 | 00 1593 | 60 1594 | a0 1595 | a0 1596 | 60 1597 | 20 1598 | c0 1599 | ENDCHAR 1600 | STARTCHAR h 1601 | ENCODING 104 1602 | SWIDTH 1 0 1603 | DWIDTH 4 0 1604 | BBX 4 8 0 -1 1605 | BITMAP 1606 | 00 1607 | 80 1608 | 80 1609 | c0 1610 | a0 1611 | a0 1612 | a0 1613 | 00 1614 | ENDCHAR 1615 | STARTCHAR i 1616 | ENCODING 105 1617 | SWIDTH 1 0 1618 | DWIDTH 4 0 1619 | BBX 4 8 0 -1 1620 | BITMAP 1621 | 00 1622 | 40 1623 | 00 1624 | c0 1625 | 40 1626 | 40 1627 | e0 1628 | 00 1629 | ENDCHAR 1630 | STARTCHAR j 1631 | ENCODING 106 1632 | SWIDTH 1 0 1633 | DWIDTH 4 0 1634 | BBX 4 8 0 -1 1635 | BITMAP 1636 | 00 1637 | 20 1638 | 00 1639 | 60 1640 | 20 1641 | 20 1642 | 20 1643 | c0 1644 | ENDCHAR 1645 | STARTCHAR k 1646 | ENCODING 107 1647 | SWIDTH 1 0 1648 | DWIDTH 4 0 1649 | BBX 4 8 0 -1 1650 | BITMAP 1651 | 00 1652 | 80 1653 | 80 1654 | a0 1655 | c0 1656 | a0 1657 | a0 1658 | 00 1659 | ENDCHAR 1660 | STARTCHAR l 1661 | ENCODING 108 1662 | SWIDTH 1 0 1663 | DWIDTH 4 0 1664 | BBX 4 8 0 -1 1665 | BITMAP 1666 | 00 1667 | 40 1668 | 40 1669 | 40 1670 | 40 1671 | 40 1672 | 40 1673 | 00 1674 | ENDCHAR 1675 | STARTCHAR m 1676 | ENCODING 109 1677 | SWIDTH 1 0 1678 | DWIDTH 4 0 1679 | BBX 4 8 0 -1 1680 | BITMAP 1681 | 00 1682 | 00 1683 | a0 1684 | e0 1685 | a0 1686 | a0 1687 | a0 1688 | 00 1689 | ENDCHAR 1690 | STARTCHAR n 1691 | ENCODING 110 1692 | SWIDTH 1 0 1693 | DWIDTH 4 0 1694 | BBX 4 8 0 -1 1695 | BITMAP 1696 | 00 1697 | 00 1698 | c0 1699 | a0 1700 | a0 1701 | a0 1702 | a0 1703 | 00 1704 | ENDCHAR 1705 | STARTCHAR o 1706 | ENCODING 111 1707 | SWIDTH 1 0 1708 | DWIDTH 4 0 1709 | BBX 4 8 0 -1 1710 | BITMAP 1711 | 00 1712 | 00 1713 | 40 1714 | a0 1715 | a0 1716 | a0 1717 | 40 1718 | 00 1719 | ENDCHAR 1720 | STARTCHAR p 1721 | ENCODING 112 1722 | SWIDTH 1 0 1723 | DWIDTH 4 0 1724 | BBX 4 8 0 -1 1725 | BITMAP 1726 | 00 1727 | 00 1728 | c0 1729 | a0 1730 | a0 1731 | c0 1732 | 80 1733 | 80 1734 | ENDCHAR 1735 | STARTCHAR q 1736 | ENCODING 113 1737 | SWIDTH 1 0 1738 | DWIDTH 4 0 1739 | BBX 4 8 0 -1 1740 | BITMAP 1741 | 00 1742 | 00 1743 | 60 1744 | a0 1745 | a0 1746 | 60 1747 | 20 1748 | 20 1749 | ENDCHAR 1750 | STARTCHAR r 1751 | ENCODING 114 1752 | SWIDTH 1 0 1753 | DWIDTH 4 0 1754 | BBX 4 8 0 -1 1755 | BITMAP 1756 | 00 1757 | 00 1758 | 60 1759 | 80 1760 | 80 1761 | 80 1762 | 80 1763 | 00 1764 | ENDCHAR 1765 | STARTCHAR s 1766 | ENCODING 115 1767 | SWIDTH 1 0 1768 | DWIDTH 4 0 1769 | BBX 4 8 0 -1 1770 | BITMAP 1771 | 00 1772 | 00 1773 | 60 1774 | 80 1775 | 40 1776 | 20 1777 | c0 1778 | 00 1779 | ENDCHAR 1780 | STARTCHAR t 1781 | ENCODING 116 1782 | SWIDTH 1 0 1783 | DWIDTH 4 0 1784 | BBX 4 8 0 -1 1785 | BITMAP 1786 | 00 1787 | 40 1788 | 40 1789 | e0 1790 | 40 1791 | 40 1792 | 40 1793 | 00 1794 | ENDCHAR 1795 | STARTCHAR u 1796 | ENCODING 117 1797 | SWIDTH 1 0 1798 | DWIDTH 4 0 1799 | BBX 4 8 0 -1 1800 | BITMAP 1801 | 00 1802 | 00 1803 | a0 1804 | a0 1805 | a0 1806 | a0 1807 | e0 1808 | 00 1809 | ENDCHAR 1810 | STARTCHAR v 1811 | ENCODING 118 1812 | SWIDTH 1 0 1813 | DWIDTH 4 0 1814 | BBX 4 8 0 -1 1815 | BITMAP 1816 | 00 1817 | 00 1818 | a0 1819 | a0 1820 | a0 1821 | a0 1822 | 40 1823 | 00 1824 | ENDCHAR 1825 | STARTCHAR w 1826 | ENCODING 119 1827 | SWIDTH 1 0 1828 | DWIDTH 4 0 1829 | BBX 4 8 0 -1 1830 | BITMAP 1831 | 00 1832 | 00 1833 | a0 1834 | a0 1835 | a0 1836 | e0 1837 | a0 1838 | 00 1839 | ENDCHAR 1840 | STARTCHAR x 1841 | ENCODING 120 1842 | SWIDTH 1 0 1843 | DWIDTH 4 0 1844 | BBX 4 8 0 -1 1845 | BITMAP 1846 | 00 1847 | 00 1848 | a0 1849 | a0 1850 | 40 1851 | a0 1852 | a0 1853 | 00 1854 | ENDCHAR 1855 | STARTCHAR y 1856 | ENCODING 121 1857 | SWIDTH 1 0 1858 | DWIDTH 4 0 1859 | BBX 4 8 0 -1 1860 | BITMAP 1861 | 00 1862 | 00 1863 | a0 1864 | a0 1865 | a0 1866 | 60 1867 | 20 1868 | c0 1869 | ENDCHAR 1870 | STARTCHAR z 1871 | ENCODING 122 1872 | SWIDTH 1 0 1873 | DWIDTH 4 0 1874 | BBX 4 8 0 -1 1875 | BITMAP 1876 | 00 1877 | 00 1878 | e0 1879 | 20 1880 | 40 1881 | 80 1882 | e0 1883 | 00 1884 | ENDCHAR 1885 | STARTCHAR { 1886 | ENCODING 123 1887 | SWIDTH 1 0 1888 | DWIDTH 4 0 1889 | BBX 4 8 0 -1 1890 | BITMAP 1891 | 20 1892 | 40 1893 | 40 1894 | 80 1895 | 40 1896 | 40 1897 | 20 1898 | 00 1899 | ENDCHAR 1900 | STARTCHAR | 1901 | ENCODING 124 1902 | SWIDTH 1 0 1903 | DWIDTH 4 0 1904 | BBX 4 8 0 -1 1905 | BITMAP 1906 | 40 1907 | 40 1908 | 40 1909 | 00 1910 | 40 1911 | 40 1912 | 40 1913 | 00 1914 | ENDCHAR 1915 | STARTCHAR } 1916 | ENCODING 125 1917 | SWIDTH 1 0 1918 | DWIDTH 4 0 1919 | BBX 4 8 0 -1 1920 | BITMAP 1921 | 80 1922 | 40 1923 | 40 1924 | 20 1925 | 40 1926 | 40 1927 | 80 1928 | 00 1929 | ENDCHAR 1930 | STARTCHAR ~ 1931 | ENCODING 126 1932 | SWIDTH 1 0 1933 | DWIDTH 4 0 1934 | BBX 4 8 0 -1 1935 | BITMAP 1936 | 00 1937 | 00 1938 | c0 1939 | 60 1940 | 00 1941 | 00 1942 | 00 1943 | 00 1944 | ENDCHAR 1945 | STARTCHAR C177 1946 | ENCODING 127 1947 | SWIDTH 1 0 1948 | DWIDTH 4 0 1949 | BBX 4 8 0 -1 1950 | BITMAP 1951 | 00 1952 | 00 1953 | 00 1954 | 00 1955 | 00 1956 | 00 1957 | 00 1958 | 00 1959 | ENDCHAR 1960 | ENDFONT 1961 | -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_03/graphics/super font 8x8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_03/graphics/super font 8x8.png -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_03/graphics/super font 8x8.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_03/graphics/super font 8x8.psd -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_03/graphics/super font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_03/graphics/super font.png -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_04/defines.h: -------------------------------------------------------------------------------- 1 | #define BLACK 0 2 | #define WHITE 1 3 | #define INVERSE 2 4 | 5 | #define SSD1306_I2C_ADDRESS 0x3C // 011110+SA0+RW - 0x3C or 0x3D 6 | 7 | #define SSD1306_LCDWIDTH 128 8 | #define SSD1306_LCDHEIGHT 64 9 | 10 | #define SSD1306_SETCONTRAST 0x81 11 | #define SSD1306_DISPLAYALLON_RESUME 0xA4 12 | #define SSD1306_DISPLAYALLON 0xA5 13 | #define SSD1306_NORMALDISPLAY 0xA6 14 | #define SSD1306_INVERTDISPLAY 0xA7 15 | #define SSD1306_DISPLAYOFF 0xAE 16 | #define SSD1306_DISPLAYON 0xAF 17 | 18 | #define SSD1306_SETDISPLAYOFFSET 0xD3 19 | #define SSD1306_SETCOMPINS 0xDA 20 | 21 | #define SSD1306_SETVCOMDETECT 0xDB 22 | 23 | #define SSD1306_SETDISPLAYCLOCKDIV 0xD5 24 | #define SSD1306_SETPRECHARGE 0xD9 25 | 26 | #define SSD1306_SETMULTIPLEX 0xA8 27 | 28 | #define SSD1306_SETLOWCOLUMN 0x00 29 | #define SSD1306_SETHIGHCOLUMN 0x10 30 | 31 | #define SSD1306_SETSTARTLINE 0x40 32 | 33 | #define SSD1306_MEMORYMODE 0x20 34 | #define SSD1306_COLUMNADDR 0x21 35 | #define SSD1306_PAGEADDR 0x22 36 | 37 | #define SSD1306_COMSCANINC 0xC0 38 | #define SSD1306_COMSCANDEC 0xC8 39 | 40 | #define SSD1306_SEGREMAP 0xA0 41 | 42 | #define SSD1306_CHARGEPUMP 0x8D 43 | 44 | #define SSD1306_EXTERNALVCC 0x1 45 | #define SSD1306_SWITCHCAPVCC 0x2 46 | 47 | // Scrolling #defines 48 | #define SSD1306_ACTIVATE_SCROLL 0x2F 49 | #define SSD1306_DEACTIVATE_SCROLL 0x2E 50 | #define SSD1306_SET_VERTICAL_SCROLL_AREA 0xA3 51 | #define SSD1306_RIGHT_HORIZONTAL_SCROLL 0x26 52 | #define SSD1306_LEFT_HORIZONTAL_SCROLL 0x27 53 | #define SSD1306_VERTICAL_AND_RIGHT_HORIZONTAL_SCROLL 0x29 54 | #define SSD1306_VERTICAL_AND_LEFT_HORIZONTAL_SCROLL 0x2A 55 | 56 | 57 | /* 58 | 59 | uint8_t opCode = 0; //When a command code comes in we copy it to this. Then we collect X payload bytes and execute command 60 | uint8_t payLoadPointer = 0; //What buffer position we are writing payload bytes to 61 | uint8_t payLoad[4]; //Buffer to store command payload bytes as they stream in 62 | 63 | uint8_t payLoadSize[] = {0, 1, 0, 0, 0, 0, 0, 0, 64 | 0, 0, 0, 0, 0, 0, 0, 0, 65 | 0, 0, 0, 0, 0, 0, 0, 0, 66 | 0, 0, 0, 0, 0, 0, 0, 1}; 67 | 68 | */ 69 | 70 | const uint8_t slotFilename[] PROGMEM = {'S','L','O','T',49,'.','B','I','N', 0}; //For creating RAM dump filenames 71 | 72 | const uint8_t OLEDboot[] PROGMEM = { //Stream of commands to set up the OLED 73 | 74 | SSD1306_DISPLAYOFF, SSD1306_SETDISPLAYCLOCKDIV, 0x80, SSD1306_SETMULTIPLEX, 63, SSD1306_SETDISPLAYOFFSET, 0x00, SSD1306_SETSTARTLINE, SSD1306_CHARGEPUMP, 0x14, 75 | SSD1306_MEMORYMODE, 0x00, 0xA1, SSD1306_COMSCANDEC, SSD1306_SETCOMPINS, 0x12, SSD1306_SETCONTRAST, 0xCF, SSD1306_SETPRECHARGE, 0xF1, SSD1306_SETVCOMDETECT, 0x40, 76 | SSD1306_DISPLAYALLON_RESUME, SSD1306_NORMALDISPLAY, SSD1306_DEACTIVATE_SCROLL, SSD1306_DISPLAYON, SSD1306_COLUMNADDR, 0x00, 127, SSD1306_PAGEADDR, 0x00, 0x07 77 | 78 | }; 79 | 80 | 81 | const uint8_t font8x8[] PROGMEM = { //The 8x8 text font with extended graphics and a set of tall letters 82 | 83 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x78, 0xbf, 0xdd, 0xed, 0x00, 0x3c, 0x7e, 0x52, 0x4a, 0x7e, 0x3c, 0x00, 0x00, 0x40, 0x44, 0x7e, 0x7e, 0x40, 0x40, 0x00, 0x00, 0x44, 0x66, 0x72, 0x5a, 0x4e, 0x44, 0x00, 0x00, 0x22, 0x62, 0x4a, 0x5e, 0x76, 0x22, 0x00, 0x00, 0x30, 0x38, 0x2c, 0x7e, 0x7e, 0x20, 0x00, 0x00, 0x2e, 0x6e, 0x4a, 0x4a, 0x7a, 0x32, 0x00, 0x00, 0x3c, 0x7e, 0x4a, 0x4a, 0x7a, 0x30, 0x00, 0x00, 0x02, 0x62, 0x72, 0x1a, 0x0e, 0x06, 0x00, 0x00, 0x34, 0x7e, 0x4a, 0x4a, 0x7e, 0x34, 0x00, 0x00, 0x04, 0x4e, 0x4a, 0x6a, 0x3e, 0x1c, 0x00, 0x80, 0xe0, 0xfc, 0x8f, 0xf4, 0x8d, 0xfd, 0xcd, 0xb7, 0xcf, 0xfc, 0xed, 0x85, 0xec, 0xff, 0xcf, 0x00, 0x00, 0x08, 0x1c, 0x3e, 0x7f, 0x00, 0x00, 0x00, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x00, 0x7f, 0x3e, 0x1c, 0x08, 0x00, 0x00, 0xf5, 0xf9, 0x3f, 0xc7, 0xd9, 0x1d, 0xc5, 0xf9, 0x3f, 0xc7, 0xf9, 0x3d, 0xc5, 0xf9, 0x7f, 0x07, 0x00, 0x78, 0x7c, 0x26, 0x26, 0x7c, 0x78, 0x00, 0x00, 0x7e, 0x7e, 0x4a, 0x4a, 0x7e, 0x34, 0x00, 0x00, 0x3c, 0x7e, 0x42, 0x42, 0x66, 0x24, 0x00, 0x00, 0x7e, 0x7e, 0x42, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x7e, 0x7e, 0x4a, 0x4a, 0x4a, 0x42, 0x00, 0x00, 0x7e, 0x7e, 0x0a, 0x0a, 0x0a, 0x02, 0x00, 0x00, 0x3c, 0x7e, 0x42, 0x52, 0x72, 0x72, 0x00, 0x00, 0x7e, 0x7e, 0x08, 0x08, 0x7e, 0x7e, 0x00, 0x00, 0x42, 0x42, 0x7e, 0x7e, 0x42, 0x42, 0x00, 0x00, 0x20, 0x60, 0x40, 0x42, 0x7e, 0x3e, 0x00, 0x00, 0x7e, 0x7e, 0x18, 0x3c, 0x66, 0x42, 0x00, 0x00, 0x7e, 0x7e, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x7e, 0x7e, 0x0c, 0x18, 0x0c, 0x7e, 0x7e, 0x00, 0x7e, 0x7e, 0x1c, 0x38, 0x7e, 0x7e, 0x00, 0x00, 0x3c, 0x7e, 0x42, 0x42, 0x7e, 0x3c, 0x00, 0x00, 0x7e, 0x7e, 0x12, 0x12, 0x1e, 0x0c, 0x00, 0x00, 0x3c, 0x7e, 0x42, 0x22, 0x7e, 0x5c, 0x00, 0x00, 0x7e, 0x7e, 0x12, 0x32, 0x7e, 0x4c, 0x00, 0x00, 0x04, 0x4e, 0x4a, 0x4a, 0x7a, 0x30, 0x00, 0x00, 0x02, 0x02, 0x7e, 0x7e, 0x02, 0x02, 0x00, 0x00, 0x7e, 0x7e, 0x40, 0x40, 0x7e, 0x7e, 0x00, 0x00, 0x1e, 0x3e, 0x60, 0x60, 0x3e, 0x1e, 0x00, 0x00, 0x7e, 0x7e, 0x30, 0x18, 0x30, 0x7e, 0x7e, 0x00, 0x66, 0x7e, 0x18, 0x18, 0x7e, 0x66, 0x00, 0x00, 0x06, 0x0e, 0x78, 0x78, 0x0e, 0x06, 0x00, 0x00, 0x62, 0x72, 0x5a, 0x4e, 0x46, 0x42, 0x00, 0x00, 0x08, 0x1c, 0x3e, 0x7f, 0x00, 0x00, 0x00, 0x94, 0xad, 0xfd, 0xfc, 0x1f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x3e, 0x1c, 0x08, 0x00, 0x7c, 0x5e, 0x5e, 0x5c, 0x5c, 0x5c, 0x44, 0x7c 84 | 85 | //0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x78, 0xbf, 0xdd, 0xed, 0xf5, 0xf9, 0x3f, 0xc7, 0xd9, 0x1d, 0xc5, 0xf9, 0x3f, 0xc7, 0xf9, 0x3d, 0xc5, 0xf9, 0x3f, 0x07, 0x80, 0xe0, 0xfc, 0x8f, 0xf4, 0x8d, 0xfd, 0xcd, 0xb7, 0xcf, 0xfc, 0xed, 0x85, 0xec, 0xff, 0xcf, 0x94, 0xad, 0xfd, 0xfc, 0x1f, 0x03, 0x00, 0x00, 0x08, 0x2a, 0x3e, 0x1c, 0x1c, 0x3e, 0x2a, 0x08, 0x00, 0x08, 0x08, 0x3e, 0x3e, 0x08, 0x08, 0x00, 0x00, 0x00, 0x80, 0xe0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x02, 0x00, 0x00, 0x3c, 0x7e, 0x52, 0x4a, 0x7e, 0x3c, 0x00, 0x00, 0x40, 0x44, 0x7e, 0x7e, 0x40, 0x40, 0x00, 0x00, 0x44, 0x66, 0x72, 0x5a, 0x4e, 0x44, 0x00, 0x00, 0x22, 0x62, 0x4a, 0x5e, 0x76, 0x22, 0x00, 0x00, 0x30, 0x38, 0x2c, 0x7e, 0x7e, 0x20, 0x00, 0x00, 0x2e, 0x6e, 0x4a, 0x4a, 0x7a, 0x32, 0x00, 0x00, 0x3c, 0x7e, 0x4a, 0x4a, 0x7a, 0x30, 0x00, 0x00, 0x02, 0x62, 0x72, 0x1a, 0x0e, 0x06, 0x00, 0x00, 0x34, 0x7e, 0x4a, 0x4a, 0x7e, 0x34, 0x00, 0x00, 0x04, 0x4e, 0x4a, 0x6a, 0x3e, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xec, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x1c, 0x3e, 0x7f, 0x00, 0x00, 0x00, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x00, 0x7f, 0x3e, 0x1c, 0x08, 0x00, 0x00, 0x00, 0x04, 0x06, 0x52, 0x5a, 0x0e, 0x04, 0x00, 0x00, 0x3c, 0x7e, 0x42, 0x5a, 0x5e, 0x5c, 0x00, 0x00, 0x78, 0x7c, 0x26, 0x26, 0x7c, 0x78, 0x00, 0x00, 0x7e, 0x7e, 0x4a, 0x4a, 0x7e, 0x34, 0x00, 0x00, 0x3c, 0x7e, 0x42, 0x42, 0x66, 0x24, 0x00, 0x00, 0x7e, 0x7e, 0x42, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x7e, 0x7e, 0x4a, 0x4a, 0x4a, 0x42, 0x00, 0x00, 0x7e, 0x7e, 0x0a, 0x0a, 0x0a, 0x02, 0x00, 0x00, 0x3c, 0x7e, 0x42, 0x52, 0x72, 0x72, 0x00, 0x00, 0x7e, 0x7e, 0x08, 0x08, 0x7e, 0x7e, 0x00, 0x00, 0x42, 0x42, 0x7e, 0x7e, 0x42, 0x42, 0x00, 0x00, 0x20, 0x60, 0x40, 0x42, 0x7e, 0x3e, 0x00, 0x00, 0x7e, 0x7e, 0x18, 0x3c, 0x66, 0x42, 0x00, 0x00, 0x7e, 0x7e, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x7e, 0x7e, 0x0c, 0x18, 0x0c, 0x7e, 0x7e, 0x00, 0x7e, 0x7e, 0x1c, 0x38, 0x7e, 0x7e, 0x00, 0x00, 0x3c, 0x7e, 0x42, 0x42, 0x7e, 0x3c, 0x00, 0x00, 0x7e, 0x7e, 0x12, 0x12, 0x1e, 0x0c, 0x00, 0x00, 0x3c, 0x7e, 0x42, 0x22, 0x7e, 0x5c, 0x00, 0x00, 0x7e, 0x7e, 0x12, 0x32, 0x7e, 0x4c, 0x00, 0x00, 0x04, 0x4e, 0x4a, 0x4a, 0x7a, 0x30, 0x00, 0x00, 0x02, 0x02, 0x7e, 0x7e, 0x02, 0x02, 0x00, 0x00, 0x7e, 0x7e, 0x40, 0x40, 0x7e, 0x7e, 0x00, 0x00, 0x1e, 0x3e, 0x60, 0x60, 0x3e, 0x1e, 0x00, 0x00, 0x7e, 0x7e, 0x30, 0x18, 0x30, 0x7e, 0x7e, 0x00, 0x66, 0x7e, 0x18, 0x18, 0x7e, 0x66, 0x00, 0x00, 0x06, 0x0e, 0x78, 0x78, 0x0e, 0x06, 0x00, 0x00, 0x62, 0x72, 0x5a, 0x4e, 0x46, 0x42, 0x00, 0x00, 0x08, 0x1c, 0x3e, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x40, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x3e, 0x1c, 0x08, 0x00, 0x7c, 0x5e, 0x5e, 0x5c, 0x5c, 0x5c, 0x44, 0x7c, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 86 | 87 | }; 88 | 89 | const uint8_t font4x8[] PROGMEM = { //The 4x8 text font 90 | 91 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x7e, 0x24, 0x7e, 0x00, 0x24, 0xcb, 0x34, 0x00, 0x62, 0x18, 0x46, 0x00, 0x3a, 0x65, 0x5a, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x00, 0x42, 0x3c, 0x00, 0x00, 0x2a, 0x1c, 0x2a, 0x00, 0x08, 0x3e, 0x08, 0x00, 0x80, 0x60, 0x00, 0x00, 0x08, 0x08, 0x08, 0x00, 0x00, 0x60, 0x00, 0x00, 0x60, 0x18, 0x06, 0x00, 0x7e, 0x42, 0x7e, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x72, 0x52, 0x5e, 0x00, 0x42, 0x52, 0x7e, 0x00, 0x1e, 0x10, 0x7e, 0x00, 0x5e, 0x52, 0x72, 0x00, 0x7e, 0x4a, 0x7a, 0x00, 0x02, 0x02, 0x7e, 0x00, 0x7e, 0x52, 0x7e, 0x00, 0x1e, 0x12, 0x7e, 0x00, 0x00, 0x24, 0x00, 0x00, 0x40, 0x24, 0x00, 0x00, 0x10, 0x28, 0x44, 0x00, 0x14, 0x14, 0x14, 0x00, 0x44, 0x28, 0x10, 0x00, 0x04, 0x52, 0x0c, 0x00, 0x3c, 0x42, 0x4c, 0x00, 0x7c, 0x12, 0x7c, 0x00, 0x7e, 0x4a, 0x34, 0x00, 0x3c, 0x42, 0x24, 0x00, 0x7e, 0x42, 0x3c, 0x00, 0x7e, 0x4a, 0x4a, 0x00, 0x7e, 0x0a, 0x0a, 0x00, 0x3c, 0x42, 0x34, 0x00, 0x7e, 0x08, 0x7e, 0x00, 0x42, 0x7e, 0x42, 0x00, 0x20, 0x40, 0x3e, 0x00, 0x7e, 0x08, 0x76, 0x00, 0x7e, 0x40, 0x40, 0x00, 0x7e, 0x04, 0x7e, 0x00, 0x7c, 0x18, 0x3e, 0x00, 0x3c, 0x42, 0x3c, 0x00, 0x7e, 0x12, 0x0c, 0x00, 0x3c, 0x62, 0x5c, 0x00, 0x7e, 0x12, 0x6c, 0x00, 0x24, 0x4a, 0x34, 0x00, 0x02, 0x7e, 0x02, 0x00, 0x7e, 0x40, 0x7e, 0x00, 0x3e, 0x40, 0x3e, 0x00, 0x7e, 0x20, 0x7e, 0x00, 0x76, 0x08, 0x76, 0x00, 0x06, 0x78, 0x06, 0x00, 0x62, 0x5a, 0x46, 0x00, 0x00, 0x7e, 0x42, 0x00, 0x06, 0x18, 0x60, 0x00, 0x42, 0x7e, 0x00, 0x00, 0x04, 0x02, 0x04, 0x00, 0x80, 0x80, 0x80, 0x80, 0x02, 0x04, 0x00, 0x00, 0x24, 0x54, 0x78, 0x00, 0x7e, 0x48, 0x30, 0x00, 0x38, 0x44, 0x44, 0x00, 0x30, 0x48, 0x7e, 0x00, 0x38, 0x54, 0x58, 0x00, 0x08, 0x7c, 0x0a, 0x00, 0x98, 0xa4, 0x7c, 0x00, 0x7e, 0x08, 0x70, 0x00, 0x48, 0x7a, 0x40, 0x00, 0x80, 0x88, 0x7a, 0x00, 0x7e, 0x10, 0x68, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7c, 0x08, 0x7c, 0x00, 0x7c, 0x04, 0x78, 0x00, 0x38, 0x44, 0x38, 0x00, 0xfc, 0x24, 0x18, 0x00, 0x18, 0x24, 0xfc, 0x00, 0x78, 0x04, 0x04, 0x00, 0x48, 0x54, 0x24, 0x00, 0x08, 0x7e, 0x08, 0x00, 0x7c, 0x40, 0x7c, 0x00, 0x3c, 0x40, 0x3c, 0x00, 0x7c, 0x20, 0x7c, 0x00, 0x6c, 0x10, 0x6c, 0x00, 0x9c, 0xa0, 0x7c, 0x00, 0x64, 0x54, 0x4c, 0x00, 0x08, 0x36, 0x41, 0x00, 0x00, 0x77, 0x00, 0x00, 0x41, 0x36, 0x08, 0x00, 0x04, 0x0c, 0x08, 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 92 | 93 | }; 94 | -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_04/graphics/Large Fonts Minimum.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_04/graphics/Large Fonts Minimum.png -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_04/graphics/Large Fonts Minimum.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_04/graphics/Large Fonts Minimum.psd -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_04/graphics/Large Fonts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_04/graphics/Large Fonts.png -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_04/graphics/Large Fonts.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_04/graphics/Large Fonts.psd -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_04/graphics/Menu Header Condensed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_04/graphics/Menu Header Condensed.png -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_04/graphics/Menu Header Condensed.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_04/graphics/Menu Header Condensed.psd -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_04/graphics/Menu header.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_04/graphics/Menu header.psd -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_04/graphics/Small Font 4x8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_04/graphics/Small Font 4x8.png -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_04/graphics/Small font 4x8.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_04/graphics/Small font 4x8.psd -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_04/graphics/Tall Font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_04/graphics/Tall Font.png -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_04/graphics/Tall Font.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_04/graphics/Tall Font.psd -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_04/graphics/atari font 4x8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_04/graphics/atari font 4x8.png -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_04/graphics/atari font 8x8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_04/graphics/atari font 8x8.png -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_04/graphics/atari font 8x8.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_04/graphics/atari font 8x8.psd -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_04/graphics/atari-small.bdf: -------------------------------------------------------------------------------- 1 | STARTFONT 2.1 2 | COMMENT 3 | COMMENT Copyright (c) 1999, Thomas A. Fine 4 | COMMENT 5 | COMMENT License to copy, modify, and distribute for both commercial and 6 | COMMENT non-commercial use is herby granted, provided this notice 7 | COMMENT is preserved. 8 | COMMENT 9 | COMMENT Email to my last name at head.cfa.harvard.edu 10 | COMMENT http://hea-www.harvard.edu/~fine/ 11 | COMMENT 12 | COMMENT Produced with bdfedit, a tcl/tk font editing program 13 | COMMENT written by Thomas A. Fine 14 | COMMENT 15 | FONT -atari-small 16 | SIZE 11 75 75 17 | FONTBOUNDINGBOX 4 8 0 -1 18 | STARTPROPERTIES 19 19 | FONTNAME_REGISTRY "" 20 | FOUNDRY "Misc" 21 | FAMILY_NAME "Fixed" 22 | WEIGHT_NAME "Medium" 23 | SLANT "R" 24 | SETWIDTH_NAME "Normal" 25 | ADD_STYLE_NAME "" 26 | PIXEL_SIZE 8 27 | POINT_SIZE 80 28 | RESOLUTION_X 75 29 | RESOLUTION_Y 75 30 | SPACING "C" 31 | AVERAGE_WIDTH 50 32 | CHARSET_REGISTRY "ISO8859" 33 | CHARSET_ENCODING "1" 34 | FONT_DESCENT 1 35 | FONT_ASCENT 7 36 | COPYRIGHT "Copyright 1999 by Thomas A. Fine" 37 | DEFAULT_CHAR 0 38 | ENDPROPERTIES 39 | CHARS 128 40 | STARTCHAR C000 41 | ENCODING 0 42 | SWIDTH 1 0 43 | DWIDTH 4 0 44 | BBX 4 8 0 -1 45 | BITMAP 46 | 00 47 | 00 48 | 00 49 | 00 50 | 00 51 | 00 52 | 00 53 | 00 54 | ENDCHAR 55 | STARTCHAR C001 56 | ENCODING 1 57 | SWIDTH 1 0 58 | DWIDTH 4 0 59 | BBX 4 8 0 -1 60 | BITMAP 61 | 00 62 | 20 63 | 70 64 | f0 65 | 70 66 | 20 67 | 00 68 | 00 69 | ENDCHAR 70 | STARTCHAR C002 71 | ENCODING 2 72 | SWIDTH 1 0 73 | DWIDTH 4 0 74 | BBX 4 8 0 -1 75 | BITMAP 76 | 00 77 | 20 78 | 50 79 | 20 80 | 50 81 | 20 82 | 50 83 | 20 84 | ENDCHAR 85 | STARTCHAR C003 86 | ENCODING 3 87 | SWIDTH 1 0 88 | DWIDTH 4 0 89 | BBX 4 8 0 -1 90 | BITMAP 91 | 50 92 | 50 93 | 70 94 | 50 95 | 50 96 | 30 97 | 10 98 | 10 99 | ENDCHAR 100 | STARTCHAR C004 101 | ENCODING 4 102 | SWIDTH 1 0 103 | DWIDTH 4 0 104 | BBX 4 8 0 -1 105 | BITMAP 106 | e0 107 | 80 108 | c0 109 | b0 110 | a0 111 | 30 112 | 20 113 | 20 114 | ENDCHAR 115 | STARTCHAR C005 116 | ENCODING 5 117 | SWIDTH 1 0 118 | DWIDTH 4 0 119 | BBX 4 8 0 -1 120 | BITMAP 121 | 60 122 | 80 123 | 60 124 | 00 125 | 30 126 | 20 127 | 30 128 | 20 129 | ENDCHAR 130 | STARTCHAR C006 131 | ENCODING 6 132 | SWIDTH 1 0 133 | DWIDTH 4 0 134 | BBX 4 8 0 -1 135 | BITMAP 136 | 80 137 | 80 138 | 80 139 | e0 140 | 30 141 | 20 142 | 30 143 | 20 144 | ENDCHAR 145 | STARTCHAR C007 146 | ENCODING 7 147 | SWIDTH 1 0 148 | DWIDTH 4 0 149 | BBX 4 8 0 -1 150 | BITMAP 151 | 00 152 | 70 153 | 50 154 | 50 155 | 70 156 | 00 157 | 00 158 | 00 159 | ENDCHAR 160 | STARTCHAR C010 161 | ENCODING 8 162 | SWIDTH 1 0 163 | DWIDTH 4 0 164 | BBX 4 8 0 -1 165 | BITMAP 166 | 00 167 | 20 168 | 70 169 | 20 170 | 00 171 | 70 172 | 00 173 | 00 174 | ENDCHAR 175 | STARTCHAR C011 176 | ENCODING 9 177 | SWIDTH 1 0 178 | DWIDTH 4 0 179 | BBX 4 8 0 -1 180 | BITMAP 181 | 90 182 | d0 183 | b0 184 | 90 185 | 20 186 | 20 187 | 20 188 | 30 189 | ENDCHAR 190 | STARTCHAR C012 191 | ENCODING 10 192 | SWIDTH 1 0 193 | DWIDTH 4 0 194 | BBX 4 8 0 -1 195 | BITMAP 196 | a0 197 | a0 198 | a0 199 | 40 200 | 30 201 | 10 202 | 10 203 | 10 204 | ENDCHAR 205 | STARTCHAR C013 206 | ENCODING 11 207 | SWIDTH 1 0 208 | DWIDTH 4 0 209 | BBX 4 8 0 -1 210 | BITMAP 211 | 20 212 | 20 213 | 20 214 | e0 215 | 00 216 | 00 217 | 00 218 | 00 219 | ENDCHAR 220 | STARTCHAR C014 221 | ENCODING 12 222 | SWIDTH 1 0 223 | DWIDTH 4 0 224 | BBX 4 8 0 -1 225 | BITMAP 226 | 00 227 | 00 228 | 00 229 | e0 230 | 20 231 | 20 232 | 20 233 | 20 234 | ENDCHAR 235 | STARTCHAR C015 236 | ENCODING 13 237 | SWIDTH 1 0 238 | DWIDTH 4 0 239 | BBX 4 8 0 -1 240 | BITMAP 241 | 00 242 | 00 243 | 00 244 | 30 245 | 20 246 | 20 247 | 20 248 | 20 249 | ENDCHAR 250 | STARTCHAR C016 251 | ENCODING 14 252 | SWIDTH 1 0 253 | DWIDTH 4 0 254 | BBX 4 8 0 -1 255 | BITMAP 256 | 20 257 | 20 258 | 20 259 | 30 260 | 00 261 | 00 262 | 00 263 | 00 264 | ENDCHAR 265 | STARTCHAR C017 266 | ENCODING 15 267 | SWIDTH 1 0 268 | DWIDTH 4 0 269 | BBX 4 8 0 -1 270 | BITMAP 271 | 20 272 | 20 273 | 20 274 | f0 275 | 20 276 | 20 277 | 20 278 | 20 279 | ENDCHAR 280 | STARTCHAR C020 281 | ENCODING 16 282 | SWIDTH 1 0 283 | DWIDTH 4 0 284 | BBX 4 8 0 -1 285 | BITMAP 286 | 00 287 | 70 288 | 00 289 | 00 290 | 00 291 | 00 292 | 00 293 | 00 294 | ENDCHAR 295 | STARTCHAR C021 296 | ENCODING 17 297 | SWIDTH 1 0 298 | DWIDTH 4 0 299 | BBX 4 8 0 -1 300 | BITMAP 301 | 00 302 | 00 303 | 70 304 | 00 305 | 00 306 | 00 307 | 00 308 | 00 309 | ENDCHAR 310 | STARTCHAR C022 311 | ENCODING 18 312 | SWIDTH 1 0 313 | DWIDTH 4 0 314 | BBX 4 8 0 -1 315 | BITMAP 316 | 00 317 | 00 318 | 00 319 | 70 320 | 00 321 | 00 322 | 00 323 | 00 324 | ENDCHAR 325 | STARTCHAR C023 326 | ENCODING 19 327 | SWIDTH 1 0 328 | DWIDTH 4 0 329 | BBX 4 8 0 -1 330 | BITMAP 331 | 00 332 | 00 333 | 00 334 | 00 335 | 70 336 | 00 337 | 00 338 | 00 339 | ENDCHAR 340 | STARTCHAR C024 341 | ENCODING 20 342 | SWIDTH 1 0 343 | DWIDTH 4 0 344 | BBX 4 8 0 -1 345 | BITMAP 346 | 00 347 | 00 348 | 00 349 | 00 350 | 00 351 | 70 352 | 00 353 | 00 354 | ENDCHAR 355 | STARTCHAR C025 356 | ENCODING 21 357 | SWIDTH 1 0 358 | DWIDTH 4 0 359 | BBX 4 8 0 -1 360 | BITMAP 361 | 20 362 | 20 363 | 20 364 | 30 365 | 20 366 | 20 367 | 20 368 | 20 369 | ENDCHAR 370 | STARTCHAR C026 371 | ENCODING 22 372 | SWIDTH 1 0 373 | DWIDTH 4 0 374 | BBX 4 8 0 -1 375 | BITMAP 376 | 20 377 | 20 378 | 20 379 | e0 380 | 20 381 | 20 382 | 20 383 | 20 384 | ENDCHAR 385 | STARTCHAR C027 386 | ENCODING 23 387 | SWIDTH 1 0 388 | DWIDTH 4 0 389 | BBX 4 8 0 -1 390 | BITMAP 391 | 20 392 | 20 393 | 20 394 | 20 395 | f0 396 | 00 397 | 00 398 | 00 399 | ENDCHAR 400 | STARTCHAR C030 401 | ENCODING 24 402 | SWIDTH 1 0 403 | DWIDTH 4 0 404 | BBX 4 8 0 -1 405 | BITMAP 406 | 00 407 | 00 408 | 00 409 | 00 410 | f0 411 | 20 412 | 20 413 | 20 414 | ENDCHAR 415 | STARTCHAR C031 416 | ENCODING 25 417 | SWIDTH 1 0 418 | DWIDTH 4 0 419 | BBX 4 8 0 -1 420 | BITMAP 421 | 20 422 | 20 423 | 20 424 | 20 425 | 20 426 | 20 427 | 20 428 | 20 429 | ENDCHAR 430 | STARTCHAR C032 431 | ENCODING 26 432 | SWIDTH 1 0 433 | DWIDTH 4 0 434 | BBX 4 8 0 -1 435 | BITMAP 436 | 00 437 | 10 438 | 20 439 | 40 440 | 20 441 | 10 442 | 70 443 | 00 444 | ENDCHAR 445 | STARTCHAR C033 446 | ENCODING 27 447 | SWIDTH 1 0 448 | DWIDTH 4 0 449 | BBX 4 8 0 -1 450 | BITMAP 451 | 00 452 | 40 453 | 20 454 | 10 455 | 20 456 | 40 457 | 70 458 | 00 459 | ENDCHAR 460 | STARTCHAR C034 461 | ENCODING 28 462 | SWIDTH 1 0 463 | DWIDTH 4 0 464 | BBX 4 8 0 -1 465 | BITMAP 466 | 00 467 | f0 468 | 50 469 | 50 470 | 50 471 | 50 472 | 00 473 | 00 474 | ENDCHAR 475 | STARTCHAR C035 476 | ENCODING 29 477 | SWIDTH 1 0 478 | DWIDTH 4 0 479 | BBX 4 8 0 -1 480 | BITMAP 481 | 00 482 | 10 483 | f0 484 | 20 485 | f0 486 | 40 487 | 00 488 | 00 489 | ENDCHAR 490 | STARTCHAR C036 491 | ENCODING 30 492 | SWIDTH 1 0 493 | DWIDTH 4 0 494 | BBX 4 8 0 -1 495 | BITMAP 496 | 30 497 | 40 498 | e0 499 | 40 500 | 70 501 | d0 502 | 40 503 | 00 504 | ENDCHAR 505 | STARTCHAR C037 506 | ENCODING 31 507 | SWIDTH 1 0 508 | DWIDTH 4 0 509 | BBX 4 8 0 -1 510 | BITMAP 511 | 00 512 | 00 513 | 00 514 | 20 515 | 00 516 | 00 517 | 00 518 | 00 519 | ENDCHAR 520 | STARTCHAR C040 521 | ENCODING 32 522 | SWIDTH 1 0 523 | DWIDTH 4 0 524 | BBX 4 8 0 -1 525 | BITMAP 526 | 00 527 | 00 528 | 00 529 | 00 530 | 00 531 | 00 532 | 00 533 | 00 534 | ENDCHAR 535 | STARTCHAR ! 536 | ENCODING 33 537 | SWIDTH 1 0 538 | DWIDTH 4 0 539 | BBX 4 8 0 -1 540 | BITMAP 541 | 00 542 | 40 543 | 40 544 | 40 545 | 40 546 | 00 547 | 40 548 | 00 549 | ENDCHAR 550 | STARTCHAR " 551 | ENCODING 34 552 | SWIDTH 1 0 553 | DWIDTH 4 0 554 | BBX 4 8 0 -1 555 | BITMAP 556 | 00 557 | A0 558 | A0 559 | 00 560 | 00 561 | 00 562 | 00 563 | 00 564 | ENDCHAR 565 | STARTCHAR # 566 | ENCODING 35 567 | SWIDTH 1 0 568 | DWIDTH 4 0 569 | BBX 4 8 0 -1 570 | BITMAP 571 | 00 572 | a0 573 | E0 574 | A0 575 | A0 576 | E0 577 | a0 578 | 00 579 | ENDCHAR 580 | STARTCHAR $ 581 | ENCODING 36 582 | SWIDTH 1 0 583 | DWIDTH 4 0 584 | BBX 4 8 0 -1 585 | BITMAP 586 | 40 587 | 40 588 | a0 589 | 40 590 | 20 591 | a0 592 | 40 593 | 40 594 | ENDCHAR 595 | STARTCHAR % 596 | ENCODING 37 597 | SWIDTH 1 0 598 | DWIDTH 4 0 599 | BBX 4 8 0 -1 600 | BITMAP 601 | 00 602 | a0 603 | 20 604 | 40 605 | 40 606 | 80 607 | a0 608 | 00 609 | ENDCHAR 610 | STARTCHAR & 611 | ENCODING 38 612 | SWIDTH 1 0 613 | DWIDTH 4 0 614 | BBX 4 8 0 -1 615 | BITMAP 616 | 40 617 | a0 618 | 40 619 | a0 620 | a0 621 | c0 622 | 60 623 | 00 624 | ENDCHAR 625 | STARTCHAR ' 626 | ENCODING 39 627 | SWIDTH 1 0 628 | DWIDTH 4 0 629 | BBX 4 8 0 -1 630 | BITMAP 631 | 00 632 | 40 633 | 40 634 | 00 635 | 00 636 | 00 637 | 00 638 | 00 639 | ENDCHAR 640 | STARTCHAR ( 641 | ENCODING 40 642 | SWIDTH 1 0 643 | DWIDTH 4 0 644 | BBX 4 8 0 -1 645 | BITMAP 646 | 00 647 | 20 648 | 40 649 | 40 650 | 40 651 | 40 652 | 20 653 | 00 654 | ENDCHAR 655 | STARTCHAR ) 656 | ENCODING 41 657 | SWIDTH 1 0 658 | DWIDTH 4 0 659 | BBX 4 8 0 -1 660 | BITMAP 661 | 00 662 | 80 663 | 40 664 | 40 665 | 40 666 | 40 667 | 80 668 | 00 669 | ENDCHAR 670 | STARTCHAR * 671 | ENCODING 42 672 | SWIDTH 1 0 673 | DWIDTH 4 0 674 | BBX 4 8 0 -1 675 | BITMAP 676 | 00 677 | a0 678 | 40 679 | e0 680 | 40 681 | a0 682 | 00 683 | 00 684 | ENDCHAR 685 | STARTCHAR + 686 | ENCODING 43 687 | SWIDTH 1 0 688 | DWIDTH 4 0 689 | BBX 4 8 0 -1 690 | BITMAP 691 | 00 692 | 40 693 | 40 694 | e0 695 | 40 696 | 40 697 | 00 698 | 00 699 | ENDCHAR 700 | STARTCHAR , 701 | ENCODING 44 702 | SWIDTH 1 0 703 | DWIDTH 4 0 704 | BBX 4 8 0 -1 705 | BITMAP 706 | 00 707 | 00 708 | 00 709 | 00 710 | 00 711 | 40 712 | 40 713 | 80 714 | ENDCHAR 715 | STARTCHAR - 716 | ENCODING 45 717 | SWIDTH 1 0 718 | DWIDTH 4 0 719 | BBX 4 8 0 -1 720 | BITMAP 721 | 00 722 | 00 723 | 00 724 | e0 725 | 00 726 | 00 727 | 00 728 | 00 729 | ENDCHAR 730 | STARTCHAR . 731 | ENCODING 46 732 | SWIDTH 1 0 733 | DWIDTH 4 0 734 | BBX 4 8 0 -1 735 | BITMAP 736 | 00 737 | 00 738 | 00 739 | 00 740 | 00 741 | 40 742 | 40 743 | 00 744 | ENDCHAR 745 | STARTCHAR / 746 | ENCODING 47 747 | SWIDTH 1 0 748 | DWIDTH 4 0 749 | BBX 4 8 0 -1 750 | BITMAP 751 | 00 752 | 20 753 | 20 754 | 40 755 | 40 756 | 80 757 | 80 758 | 00 759 | ENDCHAR 760 | STARTCHAR 0 761 | ENCODING 48 762 | SWIDTH 1 0 763 | DWIDTH 4 0 764 | BBX 4 8 0 -1 765 | BITMAP 766 | 00 767 | 40 768 | a0 769 | e0 770 | a0 771 | a0 772 | 40 773 | 00 774 | ENDCHAR 775 | STARTCHAR 1 776 | ENCODING 49 777 | SWIDTH 1 0 778 | DWIDTH 4 0 779 | BBX 4 8 0 -1 780 | BITMAP 781 | 00 782 | 40 783 | c0 784 | 40 785 | 40 786 | 40 787 | e0 788 | 00 789 | ENDCHAR 790 | STARTCHAR 2 791 | ENCODING 50 792 | SWIDTH 1 0 793 | DWIDTH 4 0 794 | BBX 4 8 0 -1 795 | BITMAP 796 | 00 797 | 40 798 | a0 799 | 20 800 | 40 801 | 80 802 | e0 803 | 00 804 | ENDCHAR 805 | STARTCHAR 3 806 | ENCODING 51 807 | SWIDTH 1 0 808 | DWIDTH 4 0 809 | BBX 4 8 0 -1 810 | BITMAP 811 | 00 812 | e0 813 | 20 814 | 40 815 | 20 816 | a0 817 | 40 818 | 00 819 | ENDCHAR 820 | STARTCHAR 4 821 | ENCODING 52 822 | SWIDTH 1 0 823 | DWIDTH 4 0 824 | BBX 4 8 0 -1 825 | BITMAP 826 | 00 827 | 20 828 | 60 829 | a0 830 | e0 831 | 20 832 | 20 833 | 00 834 | ENDCHAR 835 | STARTCHAR 5 836 | ENCODING 53 837 | SWIDTH 1 0 838 | DWIDTH 4 0 839 | BBX 4 8 0 -1 840 | BITMAP 841 | 00 842 | e0 843 | 80 844 | c0 845 | 20 846 | a0 847 | 40 848 | 00 849 | ENDCHAR 850 | STARTCHAR 6 851 | ENCODING 54 852 | SWIDTH 1 0 853 | DWIDTH 4 0 854 | BBX 4 8 0 -1 855 | BITMAP 856 | 00 857 | 60 858 | 80 859 | c0 860 | a0 861 | a0 862 | 40 863 | 00 864 | ENDCHAR 865 | STARTCHAR 7 866 | ENCODING 55 867 | SWIDTH 1 0 868 | DWIDTH 4 0 869 | BBX 4 8 0 -1 870 | BITMAP 871 | 00 872 | e0 873 | 20 874 | 20 875 | 40 876 | 40 877 | 40 878 | 00 879 | ENDCHAR 880 | STARTCHAR 8 881 | ENCODING 56 882 | SWIDTH 1 0 883 | DWIDTH 4 0 884 | BBX 4 8 0 -1 885 | BITMAP 886 | 00 887 | 40 888 | a0 889 | 40 890 | a0 891 | a0 892 | 40 893 | 00 894 | ENDCHAR 895 | STARTCHAR 9 896 | ENCODING 57 897 | SWIDTH 1 0 898 | DWIDTH 4 0 899 | BBX 4 8 0 -1 900 | BITMAP 901 | 00 902 | 40 903 | a0 904 | a0 905 | 60 906 | 20 907 | c0 908 | 00 909 | ENDCHAR 910 | STARTCHAR : 911 | ENCODING 58 912 | SWIDTH 1 0 913 | DWIDTH 4 0 914 | BBX 4 8 0 -1 915 | BITMAP 916 | 00 917 | 00 918 | 40 919 | 00 920 | 00 921 | 40 922 | 00 923 | 00 924 | ENDCHAR 925 | STARTCHAR ; 926 | ENCODING 59 927 | SWIDTH 1 0 928 | DWIDTH 4 0 929 | BBX 4 8 0 -1 930 | BITMAP 931 | 00 932 | 00 933 | 40 934 | 00 935 | 00 936 | 40 937 | 80 938 | 00 939 | ENDCHAR 940 | STARTCHAR < 941 | ENCODING 60 942 | SWIDTH 1 0 943 | DWIDTH 4 0 944 | BBX 4 8 0 -1 945 | BITMAP 946 | 00 947 | 00 948 | 20 949 | 40 950 | 80 951 | 40 952 | 20 953 | 00 954 | ENDCHAR 955 | STARTCHAR = 956 | ENCODING 61 957 | SWIDTH 1 0 958 | DWIDTH 4 0 959 | BBX 4 8 0 -1 960 | BITMAP 961 | 00 962 | 00 963 | e0 964 | 00 965 | e0 966 | 00 967 | 00 968 | 00 969 | ENDCHAR 970 | STARTCHAR > 971 | ENCODING 62 972 | SWIDTH 1 0 973 | DWIDTH 4 0 974 | BBX 4 8 0 -1 975 | BITMAP 976 | 00 977 | 00 978 | 80 979 | 40 980 | 20 981 | 40 982 | 80 983 | 00 984 | ENDCHAR 985 | STARTCHAR ? 986 | ENCODING 63 987 | SWIDTH 1 0 988 | DWIDTH 4 0 989 | BBX 4 8 0 -1 990 | BITMAP 991 | 00 992 | 40 993 | a0 994 | 20 995 | 40 996 | 00 997 | 40 998 | 00 999 | ENDCHAR 1000 | STARTCHAR @ 1001 | ENCODING 64 1002 | SWIDTH 1 0 1003 | DWIDTH 4 0 1004 | BBX 4 8 0 -1 1005 | BITMAP 1006 | 00 1007 | 40 1008 | a0 1009 | a0 1010 | 80 1011 | 80 1012 | 60 1013 | 00 1014 | ENDCHAR 1015 | STARTCHAR A 1016 | ENCODING 65 1017 | SWIDTH 1 0 1018 | DWIDTH 4 0 1019 | BBX 4 8 0 -1 1020 | BITMAP 1021 | 00 1022 | 40 1023 | a0 1024 | a0 1025 | e0 1026 | a0 1027 | a0 1028 | 00 1029 | ENDCHAR 1030 | STARTCHAR B 1031 | ENCODING 66 1032 | SWIDTH 1 0 1033 | DWIDTH 4 0 1034 | BBX 4 8 0 -1 1035 | BITMAP 1036 | 00 1037 | c0 1038 | a0 1039 | c0 1040 | a0 1041 | a0 1042 | c0 1043 | 00 1044 | ENDCHAR 1045 | STARTCHAR C 1046 | ENCODING 67 1047 | SWIDTH 1 0 1048 | DWIDTH 4 0 1049 | BBX 4 8 0 -1 1050 | BITMAP 1051 | 00 1052 | 40 1053 | a0 1054 | 80 1055 | 80 1056 | a0 1057 | 40 1058 | 00 1059 | ENDCHAR 1060 | STARTCHAR D 1061 | ENCODING 68 1062 | SWIDTH 1 0 1063 | DWIDTH 4 0 1064 | BBX 4 8 0 -1 1065 | BITMAP 1066 | 00 1067 | c0 1068 | a0 1069 | a0 1070 | a0 1071 | a0 1072 | c0 1073 | 00 1074 | ENDCHAR 1075 | STARTCHAR E 1076 | ENCODING 69 1077 | SWIDTH 1 0 1078 | DWIDTH 4 0 1079 | BBX 4 8 0 -1 1080 | BITMAP 1081 | 00 1082 | e0 1083 | 80 1084 | e0 1085 | 80 1086 | 80 1087 | e0 1088 | 00 1089 | ENDCHAR 1090 | STARTCHAR F 1091 | ENCODING 70 1092 | SWIDTH 1 0 1093 | DWIDTH 4 0 1094 | BBX 4 8 0 -1 1095 | BITMAP 1096 | 00 1097 | e0 1098 | 80 1099 | e0 1100 | 80 1101 | 80 1102 | 80 1103 | 00 1104 | ENDCHAR 1105 | STARTCHAR G 1106 | ENCODING 71 1107 | SWIDTH 1 0 1108 | DWIDTH 4 0 1109 | BBX 4 8 0 -1 1110 | BITMAP 1111 | 00 1112 | 40 1113 | a0 1114 | 80 1115 | a0 1116 | a0 1117 | 40 1118 | 00 1119 | ENDCHAR 1120 | STARTCHAR H 1121 | ENCODING 72 1122 | SWIDTH 1 0 1123 | DWIDTH 4 0 1124 | BBX 4 8 0 -1 1125 | BITMAP 1126 | 00 1127 | a0 1128 | a0 1129 | e0 1130 | a0 1131 | a0 1132 | a0 1133 | 00 1134 | ENDCHAR 1135 | STARTCHAR I 1136 | ENCODING 73 1137 | SWIDTH 1 0 1138 | DWIDTH 4 0 1139 | BBX 4 8 0 -1 1140 | BITMAP 1141 | 00 1142 | e0 1143 | 40 1144 | 40 1145 | 40 1146 | 40 1147 | e0 1148 | 00 1149 | ENDCHAR 1150 | STARTCHAR J 1151 | ENCODING 74 1152 | SWIDTH 1 0 1153 | DWIDTH 4 0 1154 | BBX 4 8 0 -1 1155 | BITMAP 1156 | 00 1157 | 20 1158 | 20 1159 | 20 1160 | 20 1161 | a0 1162 | 40 1163 | 00 1164 | ENDCHAR 1165 | STARTCHAR K 1166 | ENCODING 75 1167 | SWIDTH 1 0 1168 | DWIDTH 4 0 1169 | BBX 4 8 0 -1 1170 | BITMAP 1171 | 00 1172 | a0 1173 | a0 1174 | c0 1175 | a0 1176 | a0 1177 | a0 1178 | 00 1179 | ENDCHAR 1180 | STARTCHAR L 1181 | ENCODING 76 1182 | SWIDTH 1 0 1183 | DWIDTH 4 0 1184 | BBX 4 8 0 -1 1185 | BITMAP 1186 | 00 1187 | 80 1188 | 80 1189 | 80 1190 | 80 1191 | 80 1192 | e0 1193 | 00 1194 | ENDCHAR 1195 | STARTCHAR M 1196 | ENCODING 77 1197 | SWIDTH 1 0 1198 | DWIDTH 4 0 1199 | BBX 4 8 0 -1 1200 | BITMAP 1201 | 00 1202 | a0 1203 | e0 1204 | a0 1205 | a0 1206 | a0 1207 | a0 1208 | 00 1209 | ENDCHAR 1210 | STARTCHAR N 1211 | ENCODING 78 1212 | SWIDTH 1 0 1213 | DWIDTH 4 0 1214 | BBX 4 8 0 -1 1215 | BITMAP 1216 | 00 1217 | 20 1218 | a0 1219 | e0 1220 | e0 1221 | a0 1222 | 80 1223 | 00 1224 | ENDCHAR 1225 | STARTCHAR O 1226 | ENCODING 79 1227 | SWIDTH 1 0 1228 | DWIDTH 4 0 1229 | BBX 4 8 0 -1 1230 | BITMAP 1231 | 00 1232 | 40 1233 | a0 1234 | a0 1235 | a0 1236 | a0 1237 | 40 1238 | 00 1239 | ENDCHAR 1240 | STARTCHAR P 1241 | ENCODING 80 1242 | SWIDTH 1 0 1243 | DWIDTH 4 0 1244 | BBX 4 8 0 -1 1245 | BITMAP 1246 | 00 1247 | c0 1248 | a0 1249 | a0 1250 | c0 1251 | 80 1252 | 80 1253 | 00 1254 | ENDCHAR 1255 | STARTCHAR Q 1256 | ENCODING 81 1257 | SWIDTH 1 0 1258 | DWIDTH 4 0 1259 | BBX 4 8 0 -1 1260 | BITMAP 1261 | 00 1262 | 40 1263 | a0 1264 | a0 1265 | a0 1266 | c0 1267 | 60 1268 | 00 1269 | ENDCHAR 1270 | STARTCHAR R 1271 | ENCODING 82 1272 | SWIDTH 1 0 1273 | DWIDTH 4 0 1274 | BBX 4 8 0 -1 1275 | BITMAP 1276 | 00 1277 | c0 1278 | a0 1279 | a0 1280 | c0 1281 | a0 1282 | a0 1283 | 00 1284 | ENDCHAR 1285 | STARTCHAR S 1286 | ENCODING 83 1287 | SWIDTH 1 0 1288 | DWIDTH 4 0 1289 | BBX 4 8 0 -1 1290 | BITMAP 1291 | 00 1292 | 40 1293 | a0 1294 | 40 1295 | 20 1296 | a0 1297 | 40 1298 | 00 1299 | ENDCHAR 1300 | STARTCHAR T 1301 | ENCODING 84 1302 | SWIDTH 1 0 1303 | DWIDTH 4 0 1304 | BBX 4 8 0 -1 1305 | BITMAP 1306 | 00 1307 | e0 1308 | 40 1309 | 40 1310 | 40 1311 | 40 1312 | 40 1313 | 00 1314 | ENDCHAR 1315 | STARTCHAR U 1316 | ENCODING 85 1317 | SWIDTH 1 0 1318 | DWIDTH 4 0 1319 | BBX 4 8 0 -1 1320 | BITMAP 1321 | 00 1322 | a0 1323 | a0 1324 | a0 1325 | a0 1326 | a0 1327 | e0 1328 | 00 1329 | ENDCHAR 1330 | STARTCHAR V 1331 | ENCODING 86 1332 | SWIDTH 1 0 1333 | DWIDTH 4 0 1334 | BBX 4 8 0 -1 1335 | BITMAP 1336 | 00 1337 | a0 1338 | a0 1339 | a0 1340 | a0 1341 | a0 1342 | 40 1343 | 00 1344 | ENDCHAR 1345 | STARTCHAR W 1346 | ENCODING 87 1347 | SWIDTH 1 0 1348 | DWIDTH 4 0 1349 | BBX 4 8 0 -1 1350 | BITMAP 1351 | 00 1352 | a0 1353 | a0 1354 | a0 1355 | a0 1356 | e0 1357 | a0 1358 | 00 1359 | ENDCHAR 1360 | STARTCHAR X 1361 | ENCODING 88 1362 | SWIDTH 1 0 1363 | DWIDTH 4 0 1364 | BBX 4 8 0 -1 1365 | BITMAP 1366 | 00 1367 | a0 1368 | a0 1369 | 40 1370 | a0 1371 | a0 1372 | a0 1373 | 00 1374 | ENDCHAR 1375 | STARTCHAR Y 1376 | ENCODING 89 1377 | SWIDTH 1 0 1378 | DWIDTH 4 0 1379 | BBX 4 8 0 -1 1380 | BITMAP 1381 | 00 1382 | a0 1383 | a0 1384 | 40 1385 | 40 1386 | 40 1387 | 40 1388 | 00 1389 | ENDCHAR 1390 | STARTCHAR Z 1391 | ENCODING 90 1392 | SWIDTH 1 0 1393 | DWIDTH 4 0 1394 | BBX 4 8 0 -1 1395 | BITMAP 1396 | 00 1397 | e0 1398 | 20 1399 | 40 1400 | 40 1401 | 80 1402 | e0 1403 | 00 1404 | ENDCHAR 1405 | STARTCHAR [ 1406 | ENCODING 91 1407 | SWIDTH 1 0 1408 | DWIDTH 4 0 1409 | BBX 4 8 0 -1 1410 | BITMAP 1411 | 00 1412 | 60 1413 | 40 1414 | 40 1415 | 40 1416 | 40 1417 | 60 1418 | 00 1419 | ENDCHAR 1420 | STARTCHAR \ 1421 | ENCODING 92 1422 | SWIDTH 1 0 1423 | DWIDTH 4 0 1424 | BBX 4 8 0 -1 1425 | BITMAP 1426 | 00 1427 | 80 1428 | 80 1429 | 40 1430 | 40 1431 | 20 1432 | 20 1433 | 00 1434 | ENDCHAR 1435 | STARTCHAR ] 1436 | ENCODING 93 1437 | SWIDTH 1 0 1438 | DWIDTH 4 0 1439 | BBX 4 8 0 -1 1440 | BITMAP 1441 | 00 1442 | c0 1443 | 40 1444 | 40 1445 | 40 1446 | 40 1447 | c0 1448 | 00 1449 | ENDCHAR 1450 | STARTCHAR ^ 1451 | ENCODING 94 1452 | SWIDTH 1 0 1453 | DWIDTH 4 0 1454 | BBX 4 8 0 -1 1455 | BITMAP 1456 | 00 1457 | 40 1458 | a0 1459 | 00 1460 | 00 1461 | 00 1462 | 00 1463 | 00 1464 | ENDCHAR 1465 | STARTCHAR _ 1466 | ENCODING 95 1467 | SWIDTH 1 0 1468 | DWIDTH 4 0 1469 | BBX 4 8 0 -1 1470 | BITMAP 1471 | 00 1472 | 00 1473 | 00 1474 | 00 1475 | 00 1476 | 00 1477 | 00 1478 | f0 1479 | ENDCHAR 1480 | STARTCHAR ` 1481 | ENCODING 96 1482 | SWIDTH 1 0 1483 | DWIDTH 4 0 1484 | BBX 4 8 0 -1 1485 | BITMAP 1486 | 00 1487 | 80 1488 | 40 1489 | 00 1490 | 00 1491 | 00 1492 | 00 1493 | 00 1494 | ENDCHAR 1495 | STARTCHAR a 1496 | ENCODING 97 1497 | SWIDTH 1 0 1498 | DWIDTH 4 0 1499 | BBX 4 8 0 -1 1500 | BITMAP 1501 | 00 1502 | 00 1503 | c0 1504 | 20 1505 | 60 1506 | a0 1507 | 60 1508 | 00 1509 | ENDCHAR 1510 | STARTCHAR b 1511 | ENCODING 98 1512 | SWIDTH 1 0 1513 | DWIDTH 4 0 1514 | BBX 4 8 0 -1 1515 | BITMAP 1516 | 00 1517 | 80 1518 | 80 1519 | c0 1520 | a0 1521 | a0 1522 | c0 1523 | 00 1524 | ENDCHAR 1525 | STARTCHAR c 1526 | ENCODING 99 1527 | SWIDTH 1 0 1528 | DWIDTH 4 0 1529 | BBX 4 8 0 -1 1530 | BITMAP 1531 | 00 1532 | 00 1533 | 60 1534 | 80 1535 | 80 1536 | 80 1537 | 60 1538 | 00 1539 | ENDCHAR 1540 | STARTCHAR d 1541 | ENCODING 100 1542 | SWIDTH 1 0 1543 | DWIDTH 4 0 1544 | BBX 4 8 0 -1 1545 | BITMAP 1546 | 00 1547 | 20 1548 | 20 1549 | 60 1550 | a0 1551 | a0 1552 | 60 1553 | 00 1554 | ENDCHAR 1555 | STARTCHAR e 1556 | ENCODING 101 1557 | SWIDTH 1 0 1558 | DWIDTH 4 0 1559 | BBX 4 8 0 -1 1560 | BITMAP 1561 | 00 1562 | 00 1563 | 40 1564 | a0 1565 | e0 1566 | 80 1567 | 60 1568 | 00 1569 | ENDCHAR 1570 | STARTCHAR f 1571 | ENCODING 102 1572 | SWIDTH 1 0 1573 | DWIDTH 4 0 1574 | BBX 4 8 0 -1 1575 | BITMAP 1576 | 00 1577 | 20 1578 | 40 1579 | e0 1580 | 40 1581 | 40 1582 | 40 1583 | 00 1584 | ENDCHAR 1585 | STARTCHAR g 1586 | ENCODING 103 1587 | SWIDTH 1 0 1588 | DWIDTH 4 0 1589 | BBX 4 8 0 -1 1590 | BITMAP 1591 | 00 1592 | 00 1593 | 60 1594 | a0 1595 | a0 1596 | 60 1597 | 20 1598 | c0 1599 | ENDCHAR 1600 | STARTCHAR h 1601 | ENCODING 104 1602 | SWIDTH 1 0 1603 | DWIDTH 4 0 1604 | BBX 4 8 0 -1 1605 | BITMAP 1606 | 00 1607 | 80 1608 | 80 1609 | c0 1610 | a0 1611 | a0 1612 | a0 1613 | 00 1614 | ENDCHAR 1615 | STARTCHAR i 1616 | ENCODING 105 1617 | SWIDTH 1 0 1618 | DWIDTH 4 0 1619 | BBX 4 8 0 -1 1620 | BITMAP 1621 | 00 1622 | 40 1623 | 00 1624 | c0 1625 | 40 1626 | 40 1627 | e0 1628 | 00 1629 | ENDCHAR 1630 | STARTCHAR j 1631 | ENCODING 106 1632 | SWIDTH 1 0 1633 | DWIDTH 4 0 1634 | BBX 4 8 0 -1 1635 | BITMAP 1636 | 00 1637 | 20 1638 | 00 1639 | 60 1640 | 20 1641 | 20 1642 | 20 1643 | c0 1644 | ENDCHAR 1645 | STARTCHAR k 1646 | ENCODING 107 1647 | SWIDTH 1 0 1648 | DWIDTH 4 0 1649 | BBX 4 8 0 -1 1650 | BITMAP 1651 | 00 1652 | 80 1653 | 80 1654 | a0 1655 | c0 1656 | a0 1657 | a0 1658 | 00 1659 | ENDCHAR 1660 | STARTCHAR l 1661 | ENCODING 108 1662 | SWIDTH 1 0 1663 | DWIDTH 4 0 1664 | BBX 4 8 0 -1 1665 | BITMAP 1666 | 00 1667 | 40 1668 | 40 1669 | 40 1670 | 40 1671 | 40 1672 | 40 1673 | 00 1674 | ENDCHAR 1675 | STARTCHAR m 1676 | ENCODING 109 1677 | SWIDTH 1 0 1678 | DWIDTH 4 0 1679 | BBX 4 8 0 -1 1680 | BITMAP 1681 | 00 1682 | 00 1683 | a0 1684 | e0 1685 | a0 1686 | a0 1687 | a0 1688 | 00 1689 | ENDCHAR 1690 | STARTCHAR n 1691 | ENCODING 110 1692 | SWIDTH 1 0 1693 | DWIDTH 4 0 1694 | BBX 4 8 0 -1 1695 | BITMAP 1696 | 00 1697 | 00 1698 | c0 1699 | a0 1700 | a0 1701 | a0 1702 | a0 1703 | 00 1704 | ENDCHAR 1705 | STARTCHAR o 1706 | ENCODING 111 1707 | SWIDTH 1 0 1708 | DWIDTH 4 0 1709 | BBX 4 8 0 -1 1710 | BITMAP 1711 | 00 1712 | 00 1713 | 40 1714 | a0 1715 | a0 1716 | a0 1717 | 40 1718 | 00 1719 | ENDCHAR 1720 | STARTCHAR p 1721 | ENCODING 112 1722 | SWIDTH 1 0 1723 | DWIDTH 4 0 1724 | BBX 4 8 0 -1 1725 | BITMAP 1726 | 00 1727 | 00 1728 | c0 1729 | a0 1730 | a0 1731 | c0 1732 | 80 1733 | 80 1734 | ENDCHAR 1735 | STARTCHAR q 1736 | ENCODING 113 1737 | SWIDTH 1 0 1738 | DWIDTH 4 0 1739 | BBX 4 8 0 -1 1740 | BITMAP 1741 | 00 1742 | 00 1743 | 60 1744 | a0 1745 | a0 1746 | 60 1747 | 20 1748 | 20 1749 | ENDCHAR 1750 | STARTCHAR r 1751 | ENCODING 114 1752 | SWIDTH 1 0 1753 | DWIDTH 4 0 1754 | BBX 4 8 0 -1 1755 | BITMAP 1756 | 00 1757 | 00 1758 | 60 1759 | 80 1760 | 80 1761 | 80 1762 | 80 1763 | 00 1764 | ENDCHAR 1765 | STARTCHAR s 1766 | ENCODING 115 1767 | SWIDTH 1 0 1768 | DWIDTH 4 0 1769 | BBX 4 8 0 -1 1770 | BITMAP 1771 | 00 1772 | 00 1773 | 60 1774 | 80 1775 | 40 1776 | 20 1777 | c0 1778 | 00 1779 | ENDCHAR 1780 | STARTCHAR t 1781 | ENCODING 116 1782 | SWIDTH 1 0 1783 | DWIDTH 4 0 1784 | BBX 4 8 0 -1 1785 | BITMAP 1786 | 00 1787 | 40 1788 | 40 1789 | e0 1790 | 40 1791 | 40 1792 | 40 1793 | 00 1794 | ENDCHAR 1795 | STARTCHAR u 1796 | ENCODING 117 1797 | SWIDTH 1 0 1798 | DWIDTH 4 0 1799 | BBX 4 8 0 -1 1800 | BITMAP 1801 | 00 1802 | 00 1803 | a0 1804 | a0 1805 | a0 1806 | a0 1807 | e0 1808 | 00 1809 | ENDCHAR 1810 | STARTCHAR v 1811 | ENCODING 118 1812 | SWIDTH 1 0 1813 | DWIDTH 4 0 1814 | BBX 4 8 0 -1 1815 | BITMAP 1816 | 00 1817 | 00 1818 | a0 1819 | a0 1820 | a0 1821 | a0 1822 | 40 1823 | 00 1824 | ENDCHAR 1825 | STARTCHAR w 1826 | ENCODING 119 1827 | SWIDTH 1 0 1828 | DWIDTH 4 0 1829 | BBX 4 8 0 -1 1830 | BITMAP 1831 | 00 1832 | 00 1833 | a0 1834 | a0 1835 | a0 1836 | e0 1837 | a0 1838 | 00 1839 | ENDCHAR 1840 | STARTCHAR x 1841 | ENCODING 120 1842 | SWIDTH 1 0 1843 | DWIDTH 4 0 1844 | BBX 4 8 0 -1 1845 | BITMAP 1846 | 00 1847 | 00 1848 | a0 1849 | a0 1850 | 40 1851 | a0 1852 | a0 1853 | 00 1854 | ENDCHAR 1855 | STARTCHAR y 1856 | ENCODING 121 1857 | SWIDTH 1 0 1858 | DWIDTH 4 0 1859 | BBX 4 8 0 -1 1860 | BITMAP 1861 | 00 1862 | 00 1863 | a0 1864 | a0 1865 | a0 1866 | 60 1867 | 20 1868 | c0 1869 | ENDCHAR 1870 | STARTCHAR z 1871 | ENCODING 122 1872 | SWIDTH 1 0 1873 | DWIDTH 4 0 1874 | BBX 4 8 0 -1 1875 | BITMAP 1876 | 00 1877 | 00 1878 | e0 1879 | 20 1880 | 40 1881 | 80 1882 | e0 1883 | 00 1884 | ENDCHAR 1885 | STARTCHAR { 1886 | ENCODING 123 1887 | SWIDTH 1 0 1888 | DWIDTH 4 0 1889 | BBX 4 8 0 -1 1890 | BITMAP 1891 | 20 1892 | 40 1893 | 40 1894 | 80 1895 | 40 1896 | 40 1897 | 20 1898 | 00 1899 | ENDCHAR 1900 | STARTCHAR | 1901 | ENCODING 124 1902 | SWIDTH 1 0 1903 | DWIDTH 4 0 1904 | BBX 4 8 0 -1 1905 | BITMAP 1906 | 40 1907 | 40 1908 | 40 1909 | 00 1910 | 40 1911 | 40 1912 | 40 1913 | 00 1914 | ENDCHAR 1915 | STARTCHAR } 1916 | ENCODING 125 1917 | SWIDTH 1 0 1918 | DWIDTH 4 0 1919 | BBX 4 8 0 -1 1920 | BITMAP 1921 | 80 1922 | 40 1923 | 40 1924 | 20 1925 | 40 1926 | 40 1927 | 80 1928 | 00 1929 | ENDCHAR 1930 | STARTCHAR ~ 1931 | ENCODING 126 1932 | SWIDTH 1 0 1933 | DWIDTH 4 0 1934 | BBX 4 8 0 -1 1935 | BITMAP 1936 | 00 1937 | 00 1938 | c0 1939 | 60 1940 | 00 1941 | 00 1942 | 00 1943 | 00 1944 | ENDCHAR 1945 | STARTCHAR C177 1946 | ENCODING 127 1947 | SWIDTH 1 0 1948 | DWIDTH 4 0 1949 | BBX 4 8 0 -1 1950 | BITMAP 1951 | 00 1952 | 00 1953 | 00 1954 | 00 1955 | 00 1956 | 00 1957 | 00 1958 | 00 1959 | ENDCHAR 1960 | ENDFONT 1961 | -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_04/graphics/super font 8x8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_04/graphics/super font 8x8.png -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_04/graphics/super font 8x8.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_04/graphics/super font 8x8.psd -------------------------------------------------------------------------------- /code Arduino Leonardo/Z80_note_interface_04/graphics/super font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/code Arduino Leonardo/Z80_note_interface_04/graphics/super font.png -------------------------------------------------------------------------------- /docs/SSD1306.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/docs/SSD1306.pdf -------------------------------------------------------------------------------- /schematics/z80note.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benheck/z80note/cd4790de4d533864ce42b0e68a3a97251f7450fa/schematics/z80note.png --------------------------------------------------------------------------------