diff --git a/OperatingSystem/iictest/include/font1.s b/OperatingSystem/iictest/include/font1.s new file mode 100644 index 0000000..1892cb0 --- /dev/null +++ b/OperatingSystem/iictest/include/font1.s @@ -0,0 +1,2563 @@ +TmsFont: + ; 6x8 bitmap font by Oleg Kosenkov + ; Source: https://github.com/idispatch/raster-fonts/blob/master/font-6x8.c + + ; code=0, hex=0x00, ascii="^@" + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=1, hex=0x01, ascii="^A" + defb 00111000b + defb 01000100b + defb 01101100b + defb 01000100b + defb 01010100b + defb 01000100b + defb 00111000b + defb 00000000b + + ; code=2, hex=0x02, ascii="^B" + defb 00111000b + defb 01111100b + defb 01010100b + defb 01111100b + defb 01000100b + defb 01111100b + defb 00111000b + defb 00000000b + + ; code=3, hex=0x03, ascii="^C" + defb 00000000b + defb 00101000b + defb 01111100b + defb 01111100b + defb 01111100b + defb 00111000b + defb 00010000b + defb 00000000b + + ; code=4, hex=0x04, ascii="^D" + defb 00000000b + defb 00010000b + defb 00111000b + defb 01111100b + defb 01111100b + defb 00111000b + defb 00010000b + defb 00000000b + + ; code=5, hex=0x05, ascii="^E" + defb 00010000b + defb 00111000b + defb 00111000b + defb 00010000b + defb 01111100b + defb 01111100b + defb 00010000b + defb 00000000b + + ; code=6, hex=0x06, ascii="^F" + defb 00000000b + defb 00010000b + defb 00111000b + defb 01111100b + defb 01111100b + defb 00010000b + defb 00111000b + defb 00000000b + + ; code=7, hex=0x07, ascii="^G" + defb 00000000b + defb 00000000b + defb 00000000b + defb 00110000b + defb 00110000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=8, hex=0x08, ascii="^H" + defb 11111100b + defb 11111100b + defb 11111100b + defb 11001100b + defb 11001100b + defb 11111100b + defb 11111100b + defb 11111100b + + ; code=9, hex=0x09, ascii="^I" + defb 00000000b + defb 00000000b + defb 01111000b + defb 01001000b + defb 01001000b + defb 01111000b + defb 00000000b + defb 00000000b + + ; code=10, hex=0x0A, ascii="^J" + defb 11111100b + defb 11111100b + defb 10000100b + defb 10110100b + defb 10110100b + defb 10000100b + defb 11111100b + defb 11111100b + + ; code=11, hex=0x0b, ascii="^K" + defb 00000000b + defb 00011100b + defb 00001100b + defb 00110100b + defb 01001000b + defb 01001000b + defb 00110000b + defb 00000000b + + ; code=12, hex=0x0C, ascii="^L" + defb 00111000b + defb 01000100b + defb 01000100b + defb 00111000b + defb 00010000b + defb 00111000b + defb 00010000b + defb 00000000b + + ; code=13, hex=0x0D, ascii="^M" + defb 00010000b + defb 00011000b + defb 00010100b + defb 00010000b + defb 00110000b + defb 01110000b + defb 01100000b + defb 00000000b + + ; code=14, hex=0x0E, ascii="^N" + defb 00001100b + defb 00110100b + defb 00101100b + defb 00110100b + defb 00101100b + defb 01101100b + defb 01100000b + defb 00000000b + + ; code=15, hex=0x0F, ascii="^O" + defb 00000000b + defb 01010100b + defb 00111000b + defb 01101100b + defb 00111000b + defb 01010100b + defb 00000000b + defb 00000000b + + ; code=16, hex=0x10, ascii="^P" + defb 00100000b + defb 00110000b + defb 00111000b + defb 00111100b + defb 00111000b + defb 00110000b + defb 00100000b + defb 00000000b + + ; code=17, hex=0x11, ascii="^Q" + defb 00001000b + defb 00011000b + defb 00111000b + defb 01111000b + defb 00111000b + defb 00011000b + defb 00001000b + defb 00000000b + + ; code=18, hex=0x12, ascii="^R" + defb 00010000b + defb 00111000b + defb 01111100b + defb 00010000b + defb 01111100b + defb 00111000b + defb 00010000b + defb 00000000b + + ; code=19, hex=0x13, ascii="^S" + defb 00101000b + defb 00101000b + defb 00101000b + defb 00101000b + defb 00101000b + defb 00000000b + defb 00101000b + defb 00000000b + + ; code=20, hex=0x14, ascii="^T" + defb 00111100b + defb 01010100b + defb 01010100b + defb 00110100b + defb 00010100b + defb 00010100b + defb 00010100b + defb 00000000b + + ; code=21, hex=0x15, ascii="^U" + defb 00111000b + defb 01000100b + defb 00110000b + defb 00101000b + defb 00011000b + defb 01000100b + defb 00111000b + defb 00000000b + + ; code=22, hex=0x16, ascii="^V" + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 01111000b + defb 01111000b + defb 00000000b + + ; code=23, hex=0x17, ascii="^W" + defb 00010000b + defb 00111000b + defb 01111100b + defb 00010000b + defb 01111100b + defb 00111000b + defb 00010000b + defb 00111000b + + ; code=24, hex=0x18, ascii="^X" + defb 00010000b + defb 00111000b + defb 01111100b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00000000b + + ; code=25, hex=0x19, ascii="^Y" + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 01111100b + defb 00111000b + defb 00010000b + defb 00000000b + + ; code=26, hex=0x1A, ascii="^Z" + defb 00000000b + defb 00010000b + defb 00011000b + defb 01111100b + defb 00011000b + defb 00010000b + defb 00000000b + defb 00000000b + + ; code=27, hex=0x1B, ascii="^[" + defb 00000000b + defb 00010000b + defb 00110000b + defb 01111100b + defb 00110000b + defb 00010000b + defb 00000000b + defb 00000000b + + ; code=28, hex=0x1C, ascii="^\" + defb 00000000b + defb 00000000b + defb 00000000b + defb 01000000b + defb 01000000b + defb 01000000b + defb 01111100b + defb 00000000b + + ; code=29, hex=0x1D, ascii="^]" + defb 00000000b + defb 00101000b + defb 00101000b + defb 01111100b + defb 00101000b + defb 00101000b + defb 00000000b + defb 00000000b + + ; code=30, hex=0x1E, ascii="^^" + defb 00010000b + defb 00010000b + defb 00111000b + defb 00111000b + defb 01111100b + defb 01111100b + defb 00000000b + defb 00000000b + + ; code=31, hex=0x1F, ascii="^_" + defb 01111100b + defb 01111100b + defb 00111000b + defb 00111000b + defb 00010000b + defb 00010000b + defb 00000000b + defb 00000000b + + ; code=32, hex=0x20, ascii=" " + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=33, hex=0x21, ascii="!" + defb 00010000b + defb 00111000b + defb 00111000b + defb 00010000b + defb 00010000b + defb 00000000b + defb 00010000b + defb 00000000b + + ; code=34, hex=0x22, ascii=""" + defb 01101100b + defb 01101100b + defb 01001000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=35, hex=0x23, ascii="#" + defb 00000000b + defb 00101000b + defb 01111100b + defb 00101000b + defb 00101000b + defb 01111100b + defb 00101000b + defb 00000000b + + ; code=36, hex=0x24, ascii="$" + defb 00100000b + defb 00111000b + defb 01000000b + defb 00110000b + defb 00001000b + defb 01110000b + defb 00010000b + defb 00000000b + + ; code=37, hex=0x25, ascii="" + defb 01100100b + defb 01100100b + defb 00001000b + defb 00010000b + defb 00100000b + defb 01001100b + defb 01001100b + defb 00000000b + + ; code=38, hex=0x26, ascii="&" + defb 00100000b + defb 01010000b + defb 01010000b + defb 00100000b + defb 01010100b + defb 01001000b + defb 00110100b + defb 00000000b + + ; code=39, hex=0x27, ascii="'" + defb 00110000b + defb 00110000b + defb 00100000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=40, hex=0x28, ascii="(" + defb 00010000b + defb 00100000b + defb 00100000b + defb 00100000b + defb 00100000b + defb 00100000b + defb 00010000b + defb 00000000b + + ; code=41, hex=0x29, ascii=")" + defb 00100000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00100000b + defb 00000000b + + ; code=42, hex=0x2A, ascii="*" + defb 00000000b + defb 00101000b + defb 00111000b + defb 01111100b + defb 00111000b + defb 00101000b + defb 00000000b + defb 00000000b + + ; code=43, hex=0x2B, ascii="+" + defb 00000000b + defb 00010000b + defb 00010000b + defb 01111100b + defb 00010000b + defb 00010000b + defb 00000000b + defb 00000000b + + ; code=44, hex=0x2C, ascii="," + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00110000b + defb 00110000b + defb 00100000b + + ; code=45, hex=0x2D, ascii="-" + defb 00000000b + defb 00000000b + defb 00000000b + defb 01111100b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=46, hex=0x2E, ascii="." + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00110000b + defb 00110000b + defb 00000000b + + ; code=47, hex=0x2F, ascii="/" + defb 00000000b + defb 00000100b + defb 00001000b + defb 00010000b + defb 00100000b + defb 01000000b + defb 00000000b + defb 00000000b + + ; code=48, hex=0x30, ascii="0" + defb 00111000b + defb 01000100b + defb 01001100b + defb 01010100b + defb 01100100b + defb 01000100b + defb 00111000b + defb 00000000b + + ; code=49, hex=0x31, ascii="1" + defb 00010000b + defb 00110000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00111000b + defb 00000000b + + ; code=50, hex=0x32, ascii="2" + defb 00111000b + defb 01000100b + defb 00000100b + defb 00011000b + defb 00100000b + defb 01000000b + defb 01111100b + defb 00000000b + + ; code=51, hex=0x33, ascii="3" + defb 00111000b + defb 01000100b + defb 00000100b + defb 00111000b + defb 00000100b + defb 01000100b + defb 00111000b + defb 00000000b + + ; code=52, hex=0x34, ascii="4" + defb 00001000b + defb 00011000b + defb 00101000b + defb 01001000b + defb 01111100b + defb 00001000b + defb 00001000b + defb 00000000b + + ; code=53, hex=0x35, ascii="5" + defb 01111100b + defb 01000000b + defb 01000000b + defb 01111000b + defb 00000100b + defb 01000100b + defb 00111000b + defb 00000000b + + ; code=54, hex=0x36, ascii="6" + defb 00011000b + defb 00100000b + defb 01000000b + defb 01111000b + defb 01000100b + defb 01000100b + defb 00111000b + defb 00000000b + + ; code=55, hex=0x37, ascii="7" + defb 01111100b + defb 00000100b + defb 00001000b + defb 00010000b + defb 00100000b + defb 00100000b + defb 00100000b + defb 00000000b + + ; code=56, hex=0x38, ascii="8" + defb 00111000b + defb 01000100b + defb 01000100b + defb 00111000b + defb 01000100b + defb 01000100b + defb 00111000b + defb 00000000b + + ; code=57, hex=0x39, ascii="9" + defb 00111000b + defb 01000100b + defb 01000100b + defb 00111100b + defb 00000100b + defb 00001000b + defb 00110000b + defb 00000000b + + ; code=58, hex=0x3A, ascii=":" + defb 00000000b + defb 00000000b + defb 00110000b + defb 00110000b + defb 00000000b + defb 00110000b + defb 00110000b + defb 00000000b + + ; code=59, hex=0x3B, ascii=";" + defb 00000000b + defb 00000000b + defb 00110000b + defb 00110000b + defb 00000000b + defb 00110000b + defb 00110000b + defb 00100000b + + ; code=60, hex=0x3C, ascii="<" + defb 00001000b + defb 00010000b + defb 00100000b + defb 01000000b + defb 00100000b + defb 00010000b + defb 00001000b + defb 00000000b + + ; code=61, hex=0x3D, ascii="=" + defb 00000000b + defb 00000000b + defb 01111100b + defb 00000000b + defb 00000000b + defb 01111100b + defb 00000000b + defb 00000000b + + ; code=62, hex=0x3E, ascii=">" + defb 00100000b + defb 00010000b + defb 00001000b + defb 00000100b + defb 00001000b + defb 00010000b + defb 00100000b + defb 00000000b + + ; code=63, hex=0x3F, ascii="?" + defb 00111000b + defb 01000100b + defb 00000100b + defb 00011000b + defb 00010000b + defb 00000000b + defb 00010000b + defb 00000000b + + ; code=64, hex=0x40, ascii="@" + defb 00111000b + defb 01000100b + defb 01011100b + defb 01010100b + defb 01011100b + defb 01000000b + defb 00111000b + defb 00000000b + + ; code=65, hex=0x41, ascii="A" + defb 00111000b + defb 01000100b + defb 01000100b + defb 01000100b + defb 01111100b + defb 01000100b + defb 01000100b + defb 00000000b + + ; code=66, hex=0x42, ascii="B" + defb 01111000b + defb 01000100b + defb 01000100b + defb 01111000b + defb 01000100b + defb 01000100b + defb 01111000b + defb 00000000b + + ; code=67, hex=0x43, ascii="C" + defb 00111000b + defb 01000100b + defb 01000000b + defb 01000000b + defb 01000000b + defb 01000100b + defb 00111000b + defb 00000000b + + ; code=68, hex=0x44, ascii="D" + defb 01111000b + defb 01000100b + defb 01000100b + defb 01000100b + defb 01000100b + defb 01000100b + defb 01111000b + defb 00000000b + + ; code=69, hex=0x45, ascii="E" + defb 01111100b + defb 01000000b + defb 01000000b + defb 01111000b + defb 01000000b + defb 01000000b + defb 01111100b + defb 00000000b + + ; code=70, hex=0x46, ascii="F" + defb 01111100b + defb 01000000b + defb 01000000b + defb 01111000b + defb 01000000b + defb 01000000b + defb 01000000b + defb 00000000b + + ; code=71, hex=0x47, ascii="G" + defb 00111000b + defb 01000100b + defb 01000000b + defb 01011100b + defb 01000100b + defb 01000100b + defb 00111100b + defb 00000000b + + ; code=72, hex=0x48, ascii="H" + defb 01000100b + defb 01000100b + defb 01000100b + defb 01111100b + defb 01000100b + defb 01000100b + defb 01000100b + defb 00000000b + + ; code=73, hex=0x49, ascii="I" + defb 00111000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00111000b + defb 00000000b + + ; code=74, hex=0x4A, ascii="J" + defb 00000100b + defb 00000100b + defb 00000100b + defb 00000100b + defb 01000100b + defb 01000100b + defb 00111000b + defb 00000000b + + ; code=75, hex=0x4B, ascii="K" + defb 01000100b + defb 01001000b + defb 01010000b + defb 01100000b + defb 01010000b + defb 01001000b + defb 01000100b + defb 00000000b + + ; code=76, hex=0x4C, ascii="L" + defb 01000000b + defb 01000000b + defb 01000000b + defb 01000000b + defb 01000000b + defb 01000000b + defb 01111100b + defb 00000000b + + ; code=77, hex=0x4D, ascii="M" + defb 01000100b + defb 01101100b + defb 01010100b + defb 01000100b + defb 01000100b + defb 01000100b + defb 01000100b + defb 00000000b + + ; code=78, hex=0x4E, ascii="N" + defb 01000100b + defb 01100100b + defb 01010100b + defb 01001100b + defb 01000100b + defb 01000100b + defb 01000100b + defb 00000000b + + ; code=79, hex=0x4F, ascii="O" + defb 00111000b + defb 01000100b + defb 01000100b + defb 01000100b + defb 01000100b + defb 01000100b + defb 00111000b + defb 00000000b + + ; code=80, hex=0x50, ascii="P" + defb 01111000b + defb 01000100b + defb 01000100b + defb 01111000b + defb 01000000b + defb 01000000b + defb 01000000b + defb 00000000b + + ; code=81, hex=0x51, ascii="Q" + defb 00111000b + defb 01000100b + defb 01000100b + defb 01000100b + defb 01010100b + defb 01001000b + defb 00110100b + defb 00000000b + + ; code=82, hex=0x52, ascii="R" + defb 01111000b + defb 01000100b + defb 01000100b + defb 01111000b + defb 01001000b + defb 01000100b + defb 01000100b + defb 00000000b + + ; code=83, hex=0x53, ascii="S" + defb 00111000b + defb 01000100b + defb 01000000b + defb 00111000b + defb 00000100b + defb 01000100b + defb 00111000b + defb 00000000b + + ; code=84, hex=0x54, ascii="T" + defb 01111100b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00000000b + + ; code=85, hex=0x55, ascii="U" + defb 01000100b + defb 01000100b + defb 01000100b + defb 01000100b + defb 01000100b + defb 01000100b + defb 00111000b + defb 00000000b + + ; code=86, hex=0x56, ascii="V" + defb 01000100b + defb 01000100b + defb 01000100b + defb 01000100b + defb 01000100b + defb 00101000b + defb 00010000b + defb 00000000b + + ; code=87, hex=0x57, ascii="W" + defb 01000100b + defb 01000100b + defb 01010100b + defb 01010100b + defb 01010100b + defb 01010100b + defb 00101000b + defb 00000000b + + ; code=88, hex=0x58, ascii="X" + defb 01000100b + defb 01000100b + defb 00101000b + defb 00010000b + defb 00101000b + defb 01000100b + defb 01000100b + defb 00000000b + + ; code=89, hex=0x59, ascii="Y" + defb 01000100b + defb 01000100b + defb 01000100b + defb 00101000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00000000b + + ; code=90, hex=0x5A, ascii="Z" + defb 01111000b + defb 00001000b + defb 00010000b + defb 00100000b + defb 01000000b + defb 01000000b + defb 01111000b + defb 00000000b + + ; code=91, hex=0x5B, ascii="[" + defb 00111000b + defb 00100000b + defb 00100000b + defb 00100000b + defb 00100000b + defb 00100000b + defb 00111000b + defb 00000000b + + ; code=92, hex=0x5C, ascii="\" + defb 00000000b + defb 01000000b + defb 00100000b + defb 00010000b + defb 00001000b + defb 00000100b + defb 00000000b + defb 00000000b + + ; code=93, hex=0x5D, ascii="]" + defb 00111000b + defb 00001000b + defb 00001000b + defb 00001000b + defb 00001000b + defb 00001000b + defb 00111000b + defb 00000000b + + ; code=94, hex=0x5E, ascii="^" + defb 00010000b + defb 00101000b + defb 01000100b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=95, hex=0x5F, ascii="_" + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 11111100b + + ; code=96, hex=0x60, ascii="`" + defb 00110000b + defb 00110000b + defb 00010000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=97, hex=0x61, ascii="a" + defb 00000000b + defb 00000000b + defb 00111000b + defb 00000100b + defb 00111100b + defb 01000100b + defb 00111100b + defb 00000000b + + ; code=98, hex=0x62, ascii="b" + defb 01000000b + defb 01000000b + defb 01111000b + defb 01000100b + defb 01000100b + defb 01000100b + defb 01111000b + defb 00000000b + + ; code=99, hex=0x63, ascii="c" + defb 00000000b + defb 00000000b + defb 00111000b + defb 01000100b + defb 01000000b + defb 01000100b + defb 00111000b + defb 00000000b + + ; code=100, hex=0x64, ascii="d" + defb 00000100b + defb 00000100b + defb 00111100b + defb 01000100b + defb 01000100b + defb 01000100b + defb 00111100b + defb 00000000b + + ; code=101, hex=0x65, ascii="e" + defb 00000000b + defb 00000000b + defb 00111000b + defb 01000100b + defb 01111000b + defb 01000000b + defb 00111000b + defb 00000000b + + ; code=102, hex=0x66, ascii="f" + defb 00011000b + defb 00100000b + defb 00100000b + defb 01111000b + defb 00100000b + defb 00100000b + defb 00100000b + defb 00000000b + + ; code=103, hex=0x67, ascii="g" + defb 00000000b + defb 00000000b + defb 00111100b + defb 01000100b + defb 01000100b + defb 00111100b + defb 00000100b + defb 00111000b + + ; code=104, hex=0x68, ascii="h" + defb 01000000b + defb 01000000b + defb 01110000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 00000000b + + ; code=105, hex=0x69, ascii="i" + defb 00010000b + defb 00000000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00011000b + defb 00000000b + + ; code=106, hex=0x6A, ascii="j" + defb 00001000b + defb 00000000b + defb 00011000b + defb 00001000b + defb 00001000b + defb 00001000b + defb 01001000b + defb 00110000b + + ; code=107, hex=0x6B, ascii="k" + defb 01000000b + defb 01000000b + defb 01001000b + defb 01010000b + defb 01100000b + defb 01010000b + defb 01001000b + defb 00000000b + + ; code=108, hex=0x6C, ascii="l" + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00011000b + defb 00000000b + + ; code=109, hex=0x6D, ascii="m" + defb 00000000b + defb 00000000b + defb 01101000b + defb 01010100b + defb 01010100b + defb 01000100b + defb 01000100b + defb 00000000b + + ; code=110, hex=0x6E, ascii="n" + defb 00000000b + defb 00000000b + defb 01110000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 00000000b + + ; code=111, hex=0x6F, ascii="o" + defb 00000000b + defb 00000000b + defb 00111000b + defb 01000100b + defb 01000100b + defb 01000100b + defb 00111000b + defb 00000000b + + ; code=112, hex=0x70, ascii="p" + defb 00000000b + defb 00000000b + defb 01111000b + defb 01000100b + defb 01000100b + defb 01000100b + defb 01111000b + defb 01000000b + + ; code=113, hex=0x71, ascii="q" + defb 00000000b + defb 00000000b + defb 00111100b + defb 01000100b + defb 01000100b + defb 01000100b + defb 00111100b + defb 00000100b + + ; code=114, hex=0x72, ascii="r" + defb 00000000b + defb 00000000b + defb 01011000b + defb 00100100b + defb 00100000b + defb 00100000b + defb 01110000b + defb 00000000b + + ; code=115, hex=0x73, ascii="s" + defb 00000000b + defb 00000000b + defb 00111000b + defb 01000000b + defb 00111000b + defb 00000100b + defb 00111000b + defb 00000000b + + ; code=116, hex=0x74, ascii="t" + defb 00000000b + defb 00100000b + defb 01111000b + defb 00100000b + defb 00100000b + defb 00101000b + defb 00010000b + defb 00000000b + + ; code=117, hex=0x75, ascii="u" + defb 00000000b + defb 00000000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 01011000b + defb 00101000b + defb 00000000b + + ; code=118, hex=0x76, ascii="v" + defb 00000000b + defb 00000000b + defb 01000100b + defb 01000100b + defb 01000100b + defb 00101000b + defb 00010000b + defb 00000000b + + ; code=119, hex=0x77, ascii="w" + defb 00000000b + defb 00000000b + defb 01000100b + defb 01000100b + defb 01010100b + defb 01111100b + defb 00101000b + defb 00000000b + + ; code=120, hex=0x78, ascii="x" + defb 00000000b + defb 00000000b + defb 01001000b + defb 01001000b + defb 00110000b + defb 01001000b + defb 01001000b + defb 00000000b + + ; code=121, hex=0x79, ascii="y" + defb 00000000b + defb 00000000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 00111000b + defb 00010000b + defb 01100000b + + ; code=122, hex=0x7A, ascii="z" + defb 00000000b + defb 00000000b + defb 01111000b + defb 00001000b + defb 00110000b + defb 01000000b + defb 01111000b + defb 00000000b + + ; code=123, hex=0x7B, ascii="{" + defb 00011000b + defb 00100000b + defb 00100000b + defb 01100000b + defb 00100000b + defb 00100000b + defb 00011000b + defb 00000000b + + ; code=124, hex=0x7C, ascii="|" + defb 00010000b + defb 00010000b + defb 00010000b + defb 00000000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00000000b + + ; code=125, hex=0x7D, ascii="}" + defb 00110000b + defb 00001000b + defb 00001000b + defb 00001100b + defb 00001000b + defb 00001000b + defb 00110000b + defb 00000000b + + ; code=126, hex=0x7E, ascii="~" + defb 00101000b + defb 01010000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=127, hex=0x7F, ascii="^?" + defb 00010000b + defb 00111000b + defb 01101100b + defb 01000100b + defb 01000100b + defb 01111100b + defb 00000000b + defb 00000000b + + ; code=128, hex=0x80, ascii="!^@" + defb 00111000b + defb 01000100b + defb 01000000b + defb 01000000b + defb 01000100b + defb 00111000b + defb 00010000b + defb 00110000b + + ; code=129, hex=0x81, ascii="!^A" + defb 01001000b + defb 00000000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 01011000b + defb 00101000b + defb 00000000b + + ; code=130, hex=0x82, ascii="!^B" + defb 00001100b + defb 00000000b + defb 00111000b + defb 01000100b + defb 01111000b + defb 01000000b + defb 00111000b + defb 00000000b + + ; code=131, hex=0x83, ascii="!^C" + defb 00111000b + defb 00000000b + defb 00111000b + defb 00000100b + defb 00111100b + defb 01000100b + defb 00111100b + defb 00000000b + + ; code=132, hex=0x84, ascii="!^D" + defb 00101000b + defb 00000000b + defb 00111000b + defb 00000100b + defb 00111100b + defb 01000100b + defb 00111100b + defb 00000000b + + ; code=133, hex=0x85, ascii="!^E" + defb 00110000b + defb 00000000b + defb 00111000b + defb 00000100b + defb 00111100b + defb 01000100b + defb 00111100b + defb 00000000b + + ; code=134, hex=0x86, ascii="!^F" + defb 00111000b + defb 00101000b + defb 00111000b + defb 00000100b + defb 00111100b + defb 01000100b + defb 00111100b + defb 00000000b + + ; code=135, hex=0x87, ascii="!^G" + defb 00000000b + defb 00111000b + defb 01000100b + defb 01000000b + defb 01000100b + defb 00111000b + defb 00010000b + defb 00110000b + + ; code=136, hex=0x88, ascii="!^H" + defb 00111000b + defb 00000000b + defb 00111000b + defb 01000100b + defb 01111000b + defb 01000000b + defb 00111000b + defb 00000000b + + ; code=137, hex=0x89, ascii="!^I" + defb 00101000b + defb 00000000b + defb 00111000b + defb 01000100b + defb 01111000b + defb 01000000b + defb 00111000b + defb 00000000b + + ; code=138, hex=0x8A, ascii="!^J" + defb 00110000b + defb 00000000b + defb 00111000b + defb 01000100b + defb 01111000b + defb 01000000b + defb 00111000b + defb 00000000b + + ; code=139, hex=0x8B, ascii="!^K" + defb 00101000b + defb 00000000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00011000b + defb 00000000b + + ; code=140, hex=0x8C, ascii="!^L" + defb 00010000b + defb 00101000b + defb 00000000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00011000b + defb 00000000b + + ; code=141, hex=0x8D, ascii="!^M" + defb 00100000b + defb 00000000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00011000b + defb 00000000b + + ; code=142, hex=0x8E, ascii="!^N" + defb 00101000b + defb 00000000b + defb 00010000b + defb 00101000b + defb 01000100b + defb 01111100b + defb 01000100b + defb 00000000b + + ; code=143, hex=0x8F, ascii="!^O" + defb 00111000b + defb 00101000b + defb 00111000b + defb 01101100b + defb 01000100b + defb 01111100b + defb 01000100b + defb 00000000b + + ; code=144, hex=0x90, ascii="!^P" + defb 00001100b + defb 00000000b + defb 01111100b + defb 01000000b + defb 01111000b + defb 01000000b + defb 01111100b + defb 00000000b + + ; code=145, hex=0x91, ascii="!^Q" + defb 00000000b + defb 00000000b + defb 01111000b + defb 00010100b + defb 01111100b + defb 01010000b + defb 00111100b + defb 00000000b + + ; code=146, hex=0x92, ascii="!^R" + defb 00111100b + defb 01010000b + defb 01010000b + defb 01111100b + defb 01010000b + defb 01010000b + defb 01011100b + defb 00000000b + + ; code=147, hex=0x93, ascii="!^S" + defb 00111000b + defb 00000000b + defb 00110000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 00110000b + defb 00000000b + + ; code=148, hex=0x94, ascii="!^T" + defb 00101000b + defb 00000000b + defb 00110000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 00110000b + defb 00000000b + + ; code=149, hex=0x95, ascii="!^U" + defb 01100000b + defb 00000000b + defb 00110000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 00110000b + defb 00000000b + + ; code=150, hex=0x96, ascii="!^V" + defb 00111000b + defb 00000000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 01011000b + defb 00101000b + defb 00000000b + + ; code=151, hex=0x97, ascii="!^W" + defb 01100000b + defb 00000000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 01011000b + defb 00101000b + defb 00000000b + + ; code=152, hex=0x98, ascii="!^X" + defb 00101000b + defb 00000000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 00111000b + defb 00010000b + defb 01100000b + + ; code=153, hex=0x99, ascii="!^Y" + defb 01001000b + defb 00110000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 00110000b + defb 00000000b + + ; code=154, hex=0x9A, ascii="!^Z" + defb 00101000b + defb 00000000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 00110000b + defb 00000000b + + ; code=155, hex=0x9B, ascii="!^[" + defb 00000000b + defb 00010000b + defb 00111000b + defb 01000000b + defb 01000000b + defb 00111000b + defb 00010000b + defb 00000000b + + ; code=156, hex=0x9C, ascii="!^\" + defb 00011000b + defb 00100100b + defb 00100000b + defb 01111000b + defb 00100000b + defb 00100100b + defb 01011100b + defb 00000000b + + ; code=157, hex=0x9D, ascii="!^]" + defb 01000100b + defb 00101000b + defb 00010000b + defb 01111100b + defb 00010000b + defb 01111100b + defb 00010000b + defb 00000000b + + ; code=158, hex=0x9E, ascii="!^^" + defb 01100000b + defb 01010000b + defb 01010000b + defb 01101000b + defb 01011100b + defb 01001000b + defb 01001000b + defb 00000000b + + ; code=159, hex=0x9F, ascii="!^_" + defb 00001000b + defb 00010100b + defb 00010000b + defb 00111000b + defb 00010000b + defb 00010000b + defb 01010000b + defb 00100000b + + ; code=160, hex=0xA0, ascii="! " + defb 00011000b + defb 00000000b + defb 00111000b + defb 00000100b + defb 00111100b + defb 01000100b + defb 00111100b + defb 00000000b + + ; code=161, hex=0xA1, ascii="!!" + defb 00011000b + defb 00000000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00011000b + defb 00000000b + + ; code=162, hex=0xA2, ascii="!"" + defb 00011000b + defb 00000000b + defb 00110000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 00110000b + defb 00000000b + + ; code=163, hex=0xA3, ascii="!#" + defb 00011000b + defb 00000000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 01011000b + defb 00101000b + defb 00000000b + + ; code=164, hex=0xA4, ascii="!$" + defb 00101000b + defb 01010000b + defb 00000000b + defb 01110000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 00000000b + + ; code=165, hex=0xA5, ascii="!" + defb 00101000b + defb 01010000b + defb 00000000b + defb 01001000b + defb 01101000b + defb 01011000b + defb 01001000b + defb 00000000b + + ; code=166, hex=0xA6, ascii="!&" + defb 00111000b + defb 00000100b + defb 00111100b + defb 01000100b + defb 00111100b + defb 00000000b + defb 00111100b + defb 00000000b + + ; code=167, hex=0xA7, ascii="!'" + defb 00110000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 00110000b + defb 00000000b + defb 01111000b + defb 00000000b + + ; code=168, hex=0xA8, ascii="!(" + defb 00010000b + defb 00000000b + defb 00010000b + defb 00110000b + defb 01000000b + defb 01000100b + defb 00111000b + defb 00000000b + + ; code=169, hex=0xA9, ascii="!)" + defb 00000000b + defb 00000000b + defb 01111100b + defb 01000000b + defb 01000000b + defb 01000000b + defb 00000000b + defb 00000000b + + ; code=170, hex=0xAA, ascii="!*" + defb 00000000b + defb 00000000b + defb 11111100b + defb 00000100b + defb 00000100b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=171, hex=0xAB, ascii="!+" + defb 01000000b + defb 01001000b + defb 01010000b + defb 00111000b + defb 01000100b + defb 00001000b + defb 00011100b + defb 00000000b + + ; code=172, hex=0xAC, ascii="!," + defb 01000000b + defb 01001000b + defb 01010000b + defb 00101100b + defb 01010100b + defb 00011100b + defb 00000100b + defb 00000000b + + ; code=173, hex=0xAD, ascii="!-" + defb 00010000b + defb 00000000b + defb 00010000b + defb 00010000b + defb 00111000b + defb 00111000b + defb 00010000b + defb 00000000b + + ; code=174, hex=0xAE, ascii="!." + defb 00000000b + defb 00000000b + defb 00100100b + defb 01001000b + defb 00100100b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=175, hex=0xAF, ascii="!/" + defb 00000000b + defb 00000000b + defb 01001000b + defb 00100100b + defb 01001000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=176, hex=0xB0, ascii="!0" + defb 01010100b + defb 00000000b + defb 10101000b + defb 00000000b + defb 01010100b + defb 00000000b + defb 10101000b + defb 00000000b + + ; code=177, hex=0xB1, ascii="!1" + defb 01010100b + defb 10101000b + defb 01010100b + defb 10101000b + defb 01010100b + defb 10101000b + defb 01010100b + defb 10101000b + + ; code=178, hex=0xB2, ascii="!2" + defb 10101000b + defb 11111100b + defb 01010100b + defb 11111100b + defb 10101000b + defb 11111100b + defb 01010100b + defb 11111100b + + ; code=179, hex=0xB3, ascii="!3" + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + + ; code=180, hex=0xB4, ascii="!4" + defb 00010000b + defb 00010000b + defb 00010000b + defb 11110000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + + ; code=181, hex=0xB5, ascii="!5" + defb 00010000b + defb 11110000b + defb 00010000b + defb 11110000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + + ; code=182, hex=0xB6, ascii="!6" + defb 01010000b + defb 01010000b + defb 01010000b + defb 11010000b + defb 01010000b + defb 01010000b + defb 01010000b + defb 01010000b + + ; code=183, hex=0xB7, ascii="!7" + defb 00000000b + defb 00000000b + defb 00000000b + defb 11110000b + defb 01010000b + defb 01010000b + defb 01010000b + defb 01010000b + + ; code=184, hex=0xB8, ascii="!8" + defb 00000000b + defb 11110000b + defb 00010000b + defb 11110000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + + ; code=185, hex=0xB9, ascii="!9" + defb 01010000b + defb 11010000b + defb 00010000b + defb 11010000b + defb 01010000b + defb 01010000b + defb 01010000b + defb 01010000b + + ; code=186, hex=0xBA, ascii="!:" + defb 01010000b + defb 01010000b + defb 01010000b + defb 01010000b + defb 01010000b + defb 01010000b + defb 01010000b + defb 01010000b + + ; code=187, hex=0xBB, ascii="!;" + defb 00000000b + defb 11110000b + defb 00010000b + defb 11010000b + defb 01010000b + defb 01010000b + defb 01010000b + defb 01010000b + + ; code=188, hex=0xBC, ascii="!<" + defb 01010000b + defb 11010000b + defb 00010000b + defb 11110000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=189, hex=0xBD, ascii="!=" + defb 01010000b + defb 01010000b + defb 01010000b + defb 11110000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=190, hex=0xBE, ascii="!>" + defb 00010000b + defb 11110000b + defb 00010000b + defb 11110000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=191, hex=0xBF, ascii="!?" + defb 00000000b + defb 00000000b + defb 00000000b + defb 11110000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + + ; code=192, hex=0xC0, ascii="!@" + defb 00010000b + defb 00010000b + defb 00010000b + defb 00011100b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=193, hex=0xC1, ascii="!A" + defb 00010000b + defb 00010000b + defb 00010000b + defb 11111100b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=194, hex=0xC2, ascii="!B" + defb 00000000b + defb 00000000b + defb 00000000b + defb 11111100b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + + ; code=195, hex=0xC3, ascii="!C" + defb 00010000b + defb 00010000b + defb 00010000b + defb 00011100b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + + ; code=196, hex=0xC4, ascii="!D" + defb 00000000b + defb 00000000b + defb 00000000b + defb 11111100b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=197, hex=0xC5, ascii="!E" + defb 00010000b + defb 00010000b + defb 00010000b + defb 11111100b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + + ; code=198, hex=0xC6, ascii="!F" + defb 00010000b + defb 00011100b + defb 00010000b + defb 00011100b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + + ; code=199, hex=0xC7, ascii="!G" + defb 01010000b + defb 01010000b + defb 01010000b + defb 01011100b + defb 01010000b + defb 01010000b + defb 01010000b + defb 01010000b + + ; code=200, hex=0xC8, ascii="!H" + defb 01010000b + defb 01011100b + defb 01000000b + defb 01111100b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=201, hex=0xC9, ascii="!I" + defb 00000000b + defb 01111100b + defb 01000000b + defb 01011100b + defb 01010000b + defb 01010000b + defb 01010000b + defb 01010000b + + ; code=202, hex=0xCA, ascii="!J" + defb 01010000b + defb 11011100b + defb 00000000b + defb 11111100b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=203, hex=0xCB, ascii="!K" + defb 00000000b + defb 11111100b + defb 00000000b + defb 11011100b + defb 01010000b + defb 01010000b + defb 01010000b + defb 01010000b + + ; code=204, hex=0xCC, ascii="!L" + defb 01010000b + defb 01011100b + defb 01000000b + defb 01011100b + defb 01010000b + defb 01010000b + defb 01010000b + defb 01010000b + + ; code=205, hex=0xCD, ascii="!M" + defb 00000000b + defb 11111100b + defb 00000000b + defb 11111100b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=206, hex=0xCE, ascii="!N" + defb 01010000b + defb 11011100b + defb 00000000b + defb 11011100b + defb 01010000b + defb 01010000b + defb 01010000b + defb 01010000b + + ; code=207, hex=0xCF, ascii="!O" + defb 00010000b + defb 11111100b + defb 00000000b + defb 11111100b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=208, hex=0xD0, ascii="!P" + defb 01010000b + defb 01010000b + defb 01010000b + defb 11111100b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=209, hex=0xD1, ascii="!Q" + defb 00000000b + defb 11111100b + defb 00000000b + defb 11111100b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + + ; code=210, hex=0xD2, ascii="!R" + defb 00000000b + defb 00000000b + defb 00000000b + defb 11111100b + defb 01010000b + defb 01010000b + defb 01010000b + defb 01010000b + + ; code=211, hex=0xD3, ascii="!S" + defb 01010000b + defb 01010000b + defb 01010000b + defb 01111100b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=212, hex=0xD4, ascii="!T" + defb 00010000b + defb 00011100b + defb 00010000b + defb 00011100b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=213, hex=0xD5, ascii="!U" + defb 00000000b + defb 00011100b + defb 00010000b + defb 00011100b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + + ; code=214, hex=0xD6, ascii="!V" + defb 00000000b + defb 00000000b + defb 00000000b + defb 01111100b + defb 01010000b + defb 01010000b + defb 01010000b + defb 01010000b + + ; code=215, hex=0xD7, ascii="!W" + defb 01010000b + defb 01010000b + defb 01010000b + defb 11011100b + defb 01010000b + defb 01010000b + defb 01010000b + defb 01010000b + + ; code=216, hex=0xD8, ascii="!X" + defb 00010000b + defb 11111100b + defb 00000000b + defb 11111100b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + + ; code=217, hex=0xD9, ascii="!Y" + defb 00010000b + defb 00010000b + defb 00010000b + defb 11110000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=218, hex=0xDA, ascii="!Z" + defb 00000000b + defb 00000000b + defb 00000000b + defb 00011100b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + + ; code=219, hex=0xDB, ascii="![" + defb 11111100b + defb 11111100b + defb 11111100b + defb 11111100b + defb 11111100b + defb 11111100b + defb 11111100b + defb 11111100b + + ; code=220, hex=0xDC, ascii="!\" + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 11111100b + defb 11111100b + defb 11111100b + defb 11111100b + + ; code=221, hex=0xDD, ascii="!]" + defb 11100000b + defb 11100000b + defb 11100000b + defb 11100000b + defb 11100000b + defb 11100000b + defb 11100000b + defb 11100000b + + ; code=222, hex=0xDE, ascii="!^" + defb 00011100b + defb 00011100b + defb 00011100b + defb 00011100b + defb 00011100b + defb 00011100b + defb 00011100b + defb 00011100b + + ; code=223, hex=0xDF, ascii="!_" + defb 11111100b + defb 11111100b + defb 11111100b + defb 11111100b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=224, hex=0xE0, ascii="!`" + defb 00000000b + defb 00000000b + defb 00110100b + defb 01001000b + defb 01001000b + defb 00110100b + defb 00000000b + defb 00000000b + + ; code=225, hex=0xE1, ascii="!a" + defb 00000000b + defb 01110000b + defb 01001000b + defb 01110000b + defb 01001000b + defb 01001000b + defb 01110000b + defb 01000000b + + ; code=226, hex=0xE2, ascii="!b" + defb 01111000b + defb 01001000b + defb 01000000b + defb 01000000b + defb 01000000b + defb 01000000b + defb 01000000b + defb 00000000b + + ; code=227, hex=0xE3, ascii="!c" + defb 00000000b + defb 01111100b + defb 00101000b + defb 00101000b + defb 00101000b + defb 00101000b + defb 00101000b + defb 00000000b + + ; code=228, hex=0xE4, ascii="!d" + defb 01111000b + defb 01001000b + defb 00100000b + defb 00010000b + defb 00100000b + defb 01001000b + defb 01111000b + defb 00000000b + + ; code=229, hex=0xE5, ascii="!e" + defb 00000000b + defb 00000000b + defb 00111100b + defb 01001000b + defb 01001000b + defb 00110000b + defb 00000000b + defb 00000000b + + ; code=230, hex=0xE6, ascii="!f" + defb 00000000b + defb 00000000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 01110000b + defb 01000000b + defb 01000000b + + ; code=231, hex=0xE7, ascii="!g" + defb 00000000b + defb 00000000b + defb 00101000b + defb 01010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00000000b + + ; code=232, hex=0xE8, ascii="!h" + defb 00111000b + defb 00010000b + defb 00111000b + defb 01000100b + defb 00111000b + defb 00010000b + defb 00111000b + defb 00000000b + + ; code=233, hex=0xE9, ascii="!i" + defb 00110000b + defb 01001000b + defb 01001000b + defb 01111000b + defb 01001000b + defb 01001000b + defb 00110000b + defb 00000000b + + ; code=234, hex=0xEA, ascii="!j" + defb 00000000b + defb 00111000b + defb 01000100b + defb 01000100b + defb 00101000b + defb 00101000b + defb 01101100b + defb 00000000b + + ; code=235, hex=0xEB, ascii="!k" + defb 00110000b + defb 01000000b + defb 00100000b + defb 00010000b + defb 00111000b + defb 01001000b + defb 00110000b + defb 00000000b + + ; code=236, hex=0xEC, ascii="!l" + defb 00000000b + defb 00000000b + defb 00101000b + defb 01010100b + defb 01010100b + defb 00101000b + defb 00000000b + defb 00000000b + + ; code=237, hex=0xED, ascii="!m" + defb 00000000b + defb 00010000b + defb 00111000b + defb 01010100b + defb 01010100b + defb 00111000b + defb 00010000b + defb 00000000b + + ; code=238, hex=0xEE, ascii="!n" + defb 00000000b + defb 00111000b + defb 01000000b + defb 01111000b + defb 01000000b + defb 00111000b + defb 00000000b + defb 00000000b + + ; code=239, hex=0xEF, ascii="!o" + defb 00000000b + defb 00110000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 00000000b + defb 00000000b + + ; code=240, hex=0xF0, ascii="!p" + defb 00000000b + defb 01111000b + defb 00000000b + defb 01111000b + defb 00000000b + defb 01111000b + defb 00000000b + defb 00000000b + + ; code=241, hex=0xF1, ascii="!q" + defb 00000000b + defb 00010000b + defb 00111000b + defb 00010000b + defb 00000000b + defb 00111000b + defb 00000000b + defb 00000000b + + ; code=242, hex=0xF2, ascii="!r" + defb 01000000b + defb 00110000b + defb 00001000b + defb 00110000b + defb 01000000b + defb 00000000b + defb 01111000b + defb 00000000b + + ; code=243, hex=0xF3, ascii="!s" + defb 00001000b + defb 00110000b + defb 01000000b + defb 00110000b + defb 00001000b + defb 00000000b + defb 01111000b + defb 00000000b + + ; code=244, hex=0xF4, ascii="!t" + defb 00000000b + defb 00001000b + defb 00010100b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + + ; code=245, hex=0xF5, ascii="!u" + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 01010000b + defb 00100000b + defb 00000000b + + ; code=246, hex=0xF6, ascii="!v" + defb 00000000b + defb 00010000b + defb 00000000b + defb 01111100b + defb 00000000b + defb 00010000b + defb 00000000b + defb 00000000b + + ; code=247, hex=0xF7, ascii="!w" + defb 00000000b + defb 00101000b + defb 01010000b + defb 00000000b + defb 00101000b + defb 01010000b + defb 00000000b + defb 00000000b + + ; code=248, hex=0xF8, ascii="!x" + defb 00110000b + defb 01001000b + defb 01001000b + defb 00110000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=249, hex=0xF9, ascii="!y" + defb 00000000b + defb 00000000b + defb 00000000b + defb 00110000b + defb 00110000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=250, hex=0xFA, ascii="!z" + defb 00000000b + defb 00000000b + defb 00000000b + defb 00100000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=251, hex=0xFB, ascii="!{" + defb 00000000b + defb 00011100b + defb 00010000b + defb 00010000b + defb 01010000b + defb 01010000b + defb 00100000b + defb 00000000b + + ; code=252, hex=0xFC, ascii="!|" + defb 01010000b + defb 00101000b + defb 00101000b + defb 00101000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=253, hex=0xFD, ascii="!}" + defb 01100000b + defb 00010000b + defb 00100000b + defb 01110000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=254, hex=0xFE, ascii="!~" + defb 00000000b + defb 00000000b + defb 01111000b + defb 01111000b + defb 01111000b + defb 01111000b + defb 00000000b + defb 00000000b + + ; code=255, hex=0xFF, ascii="!^Ÿ" + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b \ No newline at end of file diff --git a/OperatingSystem/iictest/include/kdrv_iic.s b/OperatingSystem/iictest/include/kdrv_iic.s index cab70cb..87c6ea2 100644 --- a/OperatingSystem/iictest/include/kdrv_iic.s +++ b/OperatingSystem/iictest/include/kdrv_iic.s @@ -21,7 +21,7 @@ iic_init: LD A,0000010b OUT (CS_PIO_AD), A - LD BC,0x1000 + LD BC,0x2000 CALL _pause_loop LD A, 0x80 ;S1 -> Select S0, PIN disabled, ESO = 0, Interrupt disabled, STA, STA, ACK = 0 @@ -267,4 +267,5 @@ _slow_access: POP AF PUSH AF POP AF + POP AF RET \ No newline at end of file diff --git a/OperatingSystem/iictest/include/kdrv_siclk.s b/OperatingSystem/iictest/include/kdrv_siclk.s new file mode 100644 index 0000000..08d7e2a --- /dev/null +++ b/OperatingSystem/iictest/include/kdrv_siclk.s @@ -0,0 +1,11 @@ +;---------------------------------------------------------------- +;BIOS Driver for SI5351 +;by Dennis Gunia (01/2024) +;---------------------------------------------------------------- + +;Device address +ADDR_SI_CLK .EQU 0x00 + +;================================================================ +; SI registers +;================================================================ diff --git a/OperatingSystem/iictest/include/tms.s b/OperatingSystem/iictest/include/tms.s new file mode 100644 index 0000000..b89c1dd --- /dev/null +++ b/OperatingSystem/iictest/include/tms.s @@ -0,0 +1,706 @@ +; TMS9918A graphics subroutines +; Copyright 2018-2020 J.B. Langston +; +; Permission is hereby granted, free of charge, to any person obtaining a +; copy of this software and associated documentation files (the "Software"), +; to deal in the Software without restriction, including without limitation +; the rights to use, copy, modify, merge, publish, distribute, sublicense, +; and/or sell copies of the Software, and to permit persons to whom the +; Software is furnished to do so, subject to the following conditions: +; +; The above copyright notice and this permission notice shall be included in +; all copies or substantial portions of the Software. +; +; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +; FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +; DEALINGS IN THE SOFTWARE. + +; VDP Programmer's Guide: http://map.grauw.nl/resources/video/ti-vdp-programmers-guide.pdf + + phase 0xE400 +; --------------------------------------------------------------------------- +; configuration parameters; can be changed at runtime +TmsPort: + defb 0xE0 ; port for TMS vram (reg is 1 higher) +TmsWait: + defb 64 ; iterations to wait after ram access +TmsMode: + defw 0 ; mode registers +TmsNameAddr: + defw 3800h ; name table address (multiples of 400H) +TmsColorAddr: + defw 2000h ; color table address (multiples of 40H) +TmsPatternAddr: + defw 0 ; pattern table (multiples of 800H) +TmsSpritePatternAddr: + defw 1800h ; sprite attribute table (multiples of 80H) +TmsSpriteAttrAddr: + defw 3bc0h ; sprite pattern table (multiples of 800H) +TmsScreenColors: + defb 0 ; background (low nybble), text color (high nybble) +; --------------------------------------------------------------------------- +; register constants + dephase +setup_vars: + + ld a,0xE0 + ld (TmsPort),a + + ld a,2 + ld (TmsWait),a + + ld a,0 + ld (TmsMode),a + ld a,0 + ld (TmsMode+1),a + + ld a,0 + ld (TmsNameAddr),a + ld a,38h + ld (TmsNameAddr+1),a + + ld a,0 + ld (TmsPatternAddr),a + ld a,0 + ld (TmsPatternAddr+1),a + + ld a,0 + ld (TmsColorAddr),a + ld a,20h + ld (TmsColorAddr+1),a + + + ld a,0 + ld (TmsSpritePatternAddr),a + ld a,0x18 + ld (TmsSpritePatternAddr+1),a + + + ld a,0xc0 + ld (TmsSpriteAttrAddr),a + ld a,0x3b + ld (TmsSpriteAttrAddr+1),a + + ret + +TmsWriteBit: equ 40h ; bit to indicate memory write + +; Registers +TmsCtrl0Reg: equ 80h +TmsCtrl1Reg: equ 81h +TmsNameReg: equ 82h +TmsColorTableReg: equ 83h +TmsPatternReg: equ 84h +TmsSpriteAttrReg: equ 85h +TmsSpritePatternReg: equ 86h +TmsColorReg: equ 87h + +; Control Register Bits +TmsM3: equ 200h +TmsExtVideo: equ 100h +Tms16k: equ 80h +TmsDisplayEnable: equ 40h +TmsIntEnableBit: equ 20h +TmsM1: equ 10h +TmsM2: equ 8 +TmsSprite32: equ 2 +TmsSpriteMag: equ 1 + +; --------------------------------------------------------------------------- +; table lengths + +TmsTileNameLen: equ 300h +TmsTextNameLen: equ 3c0h + +TmsTileColorLen: equ 20h +TmsBitmapColorLen: equ 800h + +TmsTilePatternLen: equ 800h +TmsTextPatternLen: equ 800h +TmsMulticolorPatternLen: equ 600h +TmsBitmapPatternLen: equ 1800h + +; --------------------------------------------------------------------------- +; color constants + +TmsTransparent: equ 0 +TmsBlack: equ 1 +TmsMediumGreen: equ 2 +TmsLightGreen: equ 3 +TmsDarkBlue: equ 4 +TmsLightBlue: equ 5 +TmsDarkRed: equ 6 +TmsCyan: equ 7 +TmsMediumRed: equ 8 +TmsLightRed: equ 9 +TmsDarkYellow: equ 0ah +TmsLightYellow: equ 0bh +TmsDarkGreen: equ 0ch +TmsMagenta: equ 0dh +TmsGray: equ 0eh +TmsWhite: equ 0fh + +; --------------------------------------------------------------------------- +; port I/O routines + +; These routines access the ports configured in TmsPort. + +; These memory locations can be set at runtime to support different hardware +; configurations from the same binary. TmsProbe automatically detects the +; TMS9918A on common ports. + +; The TMS9918A RAM must not be accessed more than once every 8 us or display +; corruption may occur. During vblank and with the display disabled, +; accesses can be 2 us apart, but we will always use 8 us minimum delay. + +; TmsRamIn/TmsRamOut include a configurable delay loop, which waits for the +; configured iterations between VRAM writes to work properly with faster CPUs + +; Minimum time to execute each procedure call: +; Z80: 88 cycles, 8.8 us @ 10 MHz +; Z180: 80 cycles, 8.64 us @ 9.216 MHz, 4.32 us @ 18.432, 2.16 us @ 36.864 +; +; Additional delay per djnz iteration: +; Z80: 8 cycles * (iterations - 1) +; 0.8 us @ 10 MHz +; Z180: 7 cycles * (iterations - 1) +; 0.756 us @ 9.216 MHz, 0.378 us @ 18.432, 0.189 us @ 36.864 + +; Delay loop iterations required for different CPU speeds: +; Z80 @ 10 MHz or less: 1 +; Z180 @ 9.216 MHz or less: 1 +; Z180 @ 18.432 MHz: 10 +; Z180 @ 36.864 MHz: 31 +TmsWaits: defb 1, 10, 31 ; wait iterations to add for different CPU speeds + +; set up wait time based on clock multiplier in E +TmsSetWait: + ld a,1 + ld (TmsWait), a + ret + +; try to find TMS9918A on common ports +TmsProbe: + ld hl, TmsPorts + ld b, TmsNumPorts +TmsProbeNext: + ld a, (hl) + ld (TmsPort), a + call TmsRegIn ; clear vsync bit + call TmsRegIn ; check it again + jp m, TmsProbeFailed ; if still set, not a TMS9918A + ld de, 0ffffh ; long enough for another vsync +TmsProbeWait: + call TmsRegIn ; check vsync bit again + ret m ; if set, it's a TMS9918A (and Z is clear) + dec de ; otherwise, keep waiting + ld a, e + or d + jp nz, TmsProbeWait +TmsProbeFailed: + inc hl ; if still clear after this long, try next port + djnz TmsProbeNext + xor a ; set Z if we ran out of ports to check + ret + +TmsPorts: ; List of ports to probe: + defb 0x80 ; ColecoVision / SG-1000 + defb 98h ; MSX + defb 10h ; Sord M5 (conflicts with z80ctrl SIO port) + ;defb 8 ; Tatung Einstein (conflicts with z80ctrl drive ports) + ;defb 1 ; MTX (not supported by TMS9918A video card) + ; add additional ports to check here +TmsNumPorts: equ $ - TmsPorts + +; set a single register value +; A = register value +; E = register to set +TmsSetReg: + call TmsRegOut + ld a, e + ; fallthrough to TmsRegOut + +; write to configured register port +; parameters: +; A = value to write +TmsRegOut: + push bc + ld bc, (TmsPort) + inc c + out (c), a + pop bc + ret + +; read from configured register port +; returns: +; A = value read +TmsRegIn: + push bc + ld bc, (TmsPort) + inc c + in a, (c) + pop bc + ret + +; write to configured VRAM port +; parameters: +; A = value to write + ; Z80 | Z180 cycles... +TmsRamOut: ; 17 | 16 (call) + push bc ; 11 | 11 + ld bc, (TmsPort) ; 20 | 18 + out (c), a ; 12 | 10 +TmsRamOutDelay: + djnz TmsRamOutDelay ; 8 | 7 plus (13 | 9) * (iterations-1) + pop bc ; 10 | 9 + ret ; 10 | 9 + +; read from configured VRAM port +; returns: +; A = value read +TmsRamIn: + push bc + ld bc, (TmsPort) +TmsRamInDelay: + djnz TmsRamInDelay + in a, (c) + ld bc, (TmsPort) +TmsRamInDelay2: + djnz TmsRamInDelay2 + pop bc + ret + +; --------------------------------------------------------------------------- +; register configuration routines + +; set the background color +; A = requested color +TmsBackground: + and 0fh + ld b, a + ld a, (TmsScreenColors) + and 0f0h + or b + ld (TmsScreenColors), a + ld e, TmsColorReg + jp TmsSetReg + +; set the sprite configuration +; A = sprite options +TmsSpriteConfig: + and TmsSprite32|TmsSpriteMag + ld b, a + ld a, (TmsMode) + and ~(TmsSprite32|TmsSpriteMag) + or b + ld (TmsMode), a + ld e, TmsCtrl1Reg + jp TmsSetReg + + +; enable vblank interrupts +TmsIntEnable: + ld a, (TmsMode) + or TmsIntEnableBit + ld (TmsMode), a + ld e, TmsCtrl1Reg + jp TmsSetReg + +; disable vblank interrupts +TmsIntDisable: + ld a, (TmsMode) + and ~TmsIntEnableBit + ld (TmsMode), a + ld e, TmsCtrl1Reg + jp TmsSetReg + +; --------------------------------------------------------------------------- +; initialization routines + +TmsBlankFlags: equ Tms16k +TmsTileFlags: equ Tms16k | TmsDisplayEnable +TmsTextFlags: equ Tms16k | TmsDisplayEnable | TmsM1 +TmsMulticolorFlags: equ Tms16k | TmsDisplayEnable | TmsM2 +TmsBitmapFlags: equ Tms16k | TmsDisplayEnable | TmsM3 + +; reset registers and clear all 16KB of video memory +TmsReset: + ld hl, TmsBlankFlags ; blank the screen with 16KB enabled + ld (TmsMode), hl + ld a, l + ld e, TmsCtrl1Reg + call TmsSetReg + ld a, h + ld e, TmsCtrl0Reg + call TmsSetReg + ld a, TmsTransparent + call TmsBackground + ld a, TmsTransparent + call TmsTextColor + ld de, 0 ; clear entire VRAM + ld bc, 4000h + ld a, 0 + call TmsFill + ret + +; initialize for multicolor mode +TmsMulticolor: + call TmsReset + ld de, (TmsNameAddr) + call TmsWriteAddr + ld d, 6 ; name table has 6 sections + ld e, 0 ; lines in first section start at 0 +TmsSectionLoop: + ld c, 4 ; each section has 4 identical lines +TmsLineLoop: + ld b, 32 ; each line is 32 bytes long + ld a, e ; same starting value for each line in section +TmsByteLoop: + call TmsRamOut + inc a ; byte value + djnz TmsByteLoop + dec c ; line counter + jp nz, TmsLineLoop + ld e, a ; next starting value = current + 32 + dec d ; section counter + jp nz, TmsSectionLoop + ld hl, TmsMulticolorFlags + ld (TmsMode), hl + jp TmsInitNonBitmap + +; initialize for tiled graphics +TmsTile: + call TmsReset + ld hl, TmsTileFlags + ld (TmsMode), hl + jp TmsInitNonBitmap + +; initialize for text mode +; HL = address of font to load +TmsTextMode: + push hl + call TmsReset + pop hl + ld de, (TmsPatternAddr) ; load font from address in hl + ld bc, TmsTextPatternLen + call TmsWrite + ld hl, TmsTextFlags + ld (TmsMode), hl + ; fallthrough to TmsInitNonBitmap + +; non-bitmap color and pattern table configuration +TmsInitNonBitmap: + ; set up color table address (register = address / 400H) + ld a, (TmsColorAddr) + and 0c0h + ld (TmsColorAddr), a + ld d, a + ld a, (TmsColorAddr+1) + and 3fh + ld (TmsColorAddr+1), a + rl d + rla + rl d + rla + ld e, TmsColorTableReg + call TmsSetReg + + ; set up pattern table address (register = address / 800H) + xor a + ld (TmsPatternAddr), a + ld a, (TmsPatternAddr+1) + and 38h + ld (TmsPatternAddr+1), a + rrca + rrca + rrca + ld e, TmsPatternReg + call TmsSetReg + jp TmsInitCommon + +; initialize for bitmapped graphics +TmsBitmap: + call TmsReset + ld de, (TmsNameAddr) ; initialize name table with 3 sets + call TmsWriteAddr ; of 256 bytes ranging from 00-FF + ld b, 3 + xor a +TmsBitmapLoop: + call TmsRamOut + inc a + jp nz, TmsBitmapLoop + djnz TmsBitmapLoop + ld hl, TmsBitmapFlags + ld (TmsMode), hl + + ; set up color table at 0H (register = 7FH) or 2000H (register = 0FFH) + xor a + ld (TmsColorAddr), a + ld (TmsPatternAddr), a + ld a, (TmsColorAddr+1) + and 20h + ld (TmsColorAddr+1), a + ld a, 0ffh ; color table at 2000H + jp nz, TmsColorTableHigh + ld a, 7fh ; color table at 0H +TmsColorTableHigh: + ld e, TmsColorTableReg + call TmsSetReg + + ; set up pattern table at 0H (register = 3) or 2000H (register = 7) + ld a, (TmsPatternAddr+1) + and 20h + ld (TmsPatternAddr+1), a + ld a, 7 ; pattern table at 2000H + jp nz, TmsPatternTableHigh + ld a, 3 ; pattern table at 0H +TmsPatternTableHigh: + ld e, TmsPatternReg + call TmsSetReg + ; fall through to TmsInitCommon + + +; common initialization for all modes +TmsInitCommon: + ; set up name table address (register = address / 400H) + xor a + ld (TmsNameAddr), a + ld a, (TmsNameAddr+1) + and 3ch + ld (TmsNameAddr+1), a + rrca + rrca + ld e, TmsNameReg + call TmsSetReg + + ; set up sprite pattern table address (register = address / 80H) + ld a, (TmsSpriteAttrAddr) + and 80h + ld (TmsSpriteAttrAddr), a + ld d, a + ld a, (TmsSpriteAttrAddr+1) + and 7fh + rl d + rla + ld e, TmsSpriteAttrReg + call TmsSetReg + + ; set up sprite attribute table address (register = address / 800H) + xor a + ld (TmsSpritePatternAddr), a + ld a, (TmsSpritePatternAddr+1) + and 38h + ld (TmsSpritePatternAddr+1), a + rrca + rrca + rrca + ld e, TmsSpritePatternReg + call TmsSetReg + + ; set up control registers + ld e, TmsCtrl1Reg + ld a, (TmsMode) + call TmsSetReg + ld a, (TmsMode+1) + ld e, TmsCtrl0Reg + jp TmsSetReg + +; --------------------------------------------------------------------------- +; memory access routines + +; set the next address of vram to write +; DE = address +TmsWriteAddr: + ld a, e ; send lsb + call TmsRegOut + ld a, d ; mask off msb to max of 16KB + and 3fh + or TmsWriteBit ; indicate that this is a write + call TmsRegOut + ret + +; set the next address of vram to read +; DE = address +TmsReadAddr: + ld a, e ; send lsb + call TmsRegOut + ld a, d ; mask off msb to max of 16KB + and 3Fh + call TmsRegOut + ret + +; copy bytes from ram to vram +; HL = ram source address +; DE = vram destination address +; BC = byte count +TmsWrite: + call TmsWriteAddr +TmsWriteLoop: + ld a, (hl) + call TmsRamOut + inc hl + dec bc + ld a, b + or c + jp nz, TmsWriteLoop + ret + +; fill a section of memory with a single value +; A = value to fill +; DE = vram destination address +; BC = byte count +TmsFill: + push af + call TmsWriteAddr + pop af +TmsFillLoop: + call TmsRamOut + dec c + jp nz, TmsFillLoop + djnz TmsFillLoop + ret + +; --------------------------------------------------------------------------- +; text routines +; set text color +; A = requested color +TmsTextColor: + add a, a ; text color into high nybble + add a, a + add a, a + add a, a + ld b, a ; save for later + ld a, (TmsScreenColors) ; get current colors + and 0fh ; mask off old text color + or b ; set new text color + ld (TmsScreenColors), a + ld e, TmsColorReg + jp TmsSetReg ; save it back + +; set the address to place text at X/Y coordinate +; A = X +; E = Y +TmsTextPos: + ld d, 0 + ld hl, 0 + add hl, de ; Y x 1 + add hl, hl ; Y x 2 + add hl, hl ; Y x 4 + add hl, de ; Y x 5 + add hl, hl ; Y x 10 + add hl, hl ; Y x 20 + add hl, hl ; Y x 40 + ld e, a + add hl, de ; add X for final address + ld de, (TmsNameAddr) ; add name table base address + add hl, de + ex de, hl + jp TmsWriteAddr + +; copy a null-terminated string to VRAM +; HL = ram source address +TmsStrOut: + ld a, (hl) + cp 0 ; return when NULL is encountered + ret z + call TmsRamOut + inc hl + jp TmsStrOut + +; repeat a character a certain number of times +; A = character to output +; B = count +TmsRepeat: + call TmsRamOut + djnz TmsRepeat + ret + +; output a character +; A = character to output +TmsChrOut: equ TmsRamOut + +; --------------------------------------------------------------------------- +; bitmap routines + +TmsClearPixel: equ 0A02Fh ; cpl, and b +TmsSetPixel: equ 0B0h ; nop, or b + +; set operation for TmsPlotPixel to perform +; HL = pixel operation (TmsClearPixel, TmsSetPixel) +TmsPixelOp: + ld (TmsPixelOpPlaceHolder), hl + ret + +; set or clear pixel at X, Y position +; B = Y position +; C = X position +TmsPlotPixel: + ld a, b ; bail out if Y coord > 191 + cp 192 + ret nc + call TmsXYAddr ; get address in DE for X/Y coord in BC + ld a, c ; get lower 3 bits of X coord + and 7 + ld b, 0 + ld c, a + ld hl, TmsMaskLookup ; address of mask in table + add hl, bc + ld b, (hl) ; save mask in B + ld hl, (TmsPatternAddr) ; get base address for pattern table + add hl, de + ex de, hl + call TmsReadAddr ; set read within pattern table + call TmsRamIn +TmsPixelOpPlaceHolder: + or b ; mask bit in previous byte + nop ; place holder for 2 byte mask operation + push af + call TmsWriteAddr ; set write address within pattern table + pop af + jp TmsRamOut + +TmsMaskLookup: + defb 80h, 40h, 20h, 10h, 8h, 4h, 2h, 1h + +; set the color for a block of pixels in bitmap mode +; B = Y position +; C = X position +; A = foreground/background color to set +TmsPixelColor: + push af + ld a, b ; bail out if Y coord > 191 + cp 192 + ret nc + call TmsXYAddr ; get address in DE for X/Y coord in BC + ld hl, (TmsColorAddr) ; add the color table base address + add hl, de + ex de, hl + call TmsWriteAddr ; set write address within color table + pop af + jp TmsRamOut + +; calculate address byte containing X/Y coordinate +; B = Y position +; C = X position +; returns address in DE +TmsXYAddr: + ld a, b ; d = (y / 8) + rrca + rrca + rrca + and 1fh + ld d, a + + ld a, c ; e = (x & f8) + and 0f8h + ld e, a + + ld a, b ; e += (y & 7) + and 7 + or e + ld e, a + ret \ No newline at end of file diff --git a/OperatingSystem/iictest/include/tmsfont.s b/OperatingSystem/iictest/include/tmsfont.s new file mode 100644 index 0000000..47a34d8 --- /dev/null +++ b/OperatingSystem/iictest/include/tmsfont.s @@ -0,0 +1,2552 @@ +; 6x8 bitmap font by Oleg Kosenkov +; Source: https://github.com/idispatch/raster-fonts/blob/master/font-6x8.c +TmsFont: + + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=1, hex=0x01, ascii="^A" + defb 00111000b + defb 01000100b + defb 01101100b + defb 01000100b + defb 01010100b + defb 01000100b + defb 00111000b + defb 00000000b + + ; code=2, hex=0x02, ascii="^B" + defb 00111000b + defb 01111100b + defb 01010100b + defb 01111100b + defb 01000100b + defb 01111100b + defb 00111000b + defb 00000000b + + ; code=3, hex=0x03, ascii="^C" + defb 00000000b + defb 00101000b + defb 01111100b + defb 01111100b + defb 01111100b + defb 00111000b + defb 00010000b + defb 00000000b + + ; code=4, hex=0x04, ascii="^D" + defb 00000000b + defb 00010000b + defb 00111000b + defb 01111100b + defb 01111100b + defb 00111000b + defb 00010000b + defb 00000000b + + ; code=5, hex=0x05, ascii="^E" + defb 00010000b + defb 00111000b + defb 00111000b + defb 00010000b + defb 01111100b + defb 01111100b + defb 00010000b + defb 00000000b + + ; code=6, hex=0x06, ascii="^F" + defb 00000000b + defb 00010000b + defb 00111000b + defb 01111100b + defb 01111100b + defb 00010000b + defb 00111000b + defb 00000000b + + ; code=7, hex=0x07, ascii="^G" + defb 00000000b + defb 00000000b + defb 00000000b + defb 00110000b + defb 00110000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=8, hex=0x08, ascii="^H" + defb 11111100b + defb 11111100b + defb 11111100b + defb 11001100b + defb 11001100b + defb 11111100b + defb 11111100b + defb 11111100b + + ; code=9, hex=0x09, ascii="^I" + defb 00000000b + defb 00000000b + defb 01111000b + defb 01001000b + defb 01001000b + defb 01111000b + defb 00000000b + defb 00000000b + + ; code=10, hex=0x0A, ascii="^J" + defb 11111100b + defb 11111100b + defb 10000100b + defb 10110100b + defb 10110100b + defb 10000100b + defb 11111100b + defb 11111100b + + ; code=11, hex=0x0B, ascii="^K" + defb 00000000b + defb 00011100b + defb 00001100b + defb 00110100b + defb 01001000b + defb 01001000b + defb 00110000b + defb 00000000b + + ; code=12, hex=0x0C, ascii="^L" + defb 00111000b + defb 01000100b + defb 01000100b + defb 00111000b + defb 00010000b + defb 00111000b + defb 00010000b + defb 00000000b + + ; code=13, hex=0x0D, ascii="^M" + defb 00010000b + defb 00011000b + defb 00010100b + defb 00010000b + defb 00110000b + defb 01110000b + defb 01100000b + defb 00000000b + + ; code=14, hex=0x0E, ascii="^N" + defb 00001100b + defb 00110100b + defb 00101100b + defb 00110100b + defb 00101100b + defb 01101100b + defb 01100000b + defb 00000000b + + ; code=15, hex=0x0F, ascii="^O" + defb 00000000b + defb 01010100b + defb 00111000b + defb 01101100b + defb 00111000b + defb 01010100b + defb 00000000b + defb 00000000b + + ; code=16, hex=0x10, ascii="^P" + defb 00100000b + defb 00110000b + defb 00111000b + defb 00111100b + defb 00111000b + defb 00110000b + defb 00100000b + defb 00000000b + + ; code=17, hex=0x11, ascii="^Q" + defb 00001000b + defb 00011000b + defb 00111000b + defb 01111000b + defb 00111000b + defb 00011000b + defb 00001000b + defb 00000000b + + ; code=18, hex=0x12, ascii="^R" + defb 00010000b + defb 00111000b + defb 01111100b + defb 00010000b + defb 01111100b + defb 00111000b + defb 00010000b + defb 00000000b + + ; code=19, hex=0x13, ascii="^S" + defb 00101000b + defb 00101000b + defb 00101000b + defb 00101000b + defb 00101000b + defb 00000000b + defb 00101000b + defb 00000000b + + ; code=20, hex=0x14, ascii="^T" + defb 00111100b + defb 01010100b + defb 01010100b + defb 00110100b + defb 00010100b + defb 00010100b + defb 00010100b + defb 00000000b + + ; code=21, hex=0x15, ascii="^U" + defb 00111000b + defb 01000100b + defb 00110000b + defb 00101000b + defb 00011000b + defb 01000100b + defb 00111000b + defb 00000000b + + ; code=22, hex=0x16, ascii="^V" + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 01111000b + defb 01111000b + defb 00000000b + + ; code=23, hex=0x17, ascii="^W" + defb 00010000b + defb 00111000b + defb 01111100b + defb 00010000b + defb 01111100b + defb 00111000b + defb 00010000b + defb 00111000b + + ; code=24, hex=0x18, ascii="^X" + defb 00010000b + defb 00111000b + defb 01111100b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00000000b + + ; code=25, hex=0x19, ascii="^Y" + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 01111100b + defb 00111000b + defb 00010000b + defb 00000000b + + ; code=26, hex=0x1A, ascii="^Z" + defb 00000000b + defb 00010000b + defb 00011000b + defb 01111100b + defb 00011000b + defb 00010000b + defb 00000000b + defb 00000000b + + ; code=27, hex=0x1B, ascii="^[" + defb 00000000b + defb 00010000b + defb 00110000b + defb 01111100b + defb 00110000b + defb 00010000b + defb 00000000b + defb 00000000b + + ; code=28, hex=0x1C, ascii="^\" + defb 00000000b + defb 00000000b + defb 00000000b + defb 01000000b + defb 01000000b + defb 01000000b + defb 01111100b + defb 00000000b + + ; code=29, hex=0x1D, ascii="^]" + defb 00000000b + defb 00101000b + defb 00101000b + defb 01111100b + defb 00101000b + defb 00101000b + defb 00000000b + defb 00000000b + + ; code=30, hex=0x1E, ascii="^^" + defb 00010000b + defb 00010000b + defb 00111000b + defb 00111000b + defb 01111100b + defb 01111100b + defb 00000000b + defb 00000000b + + ; code=31, hex=0x1F, ascii="^_" + defb 01111100b + defb 01111100b + defb 00111000b + defb 00111000b + defb 00010000b + defb 00010000b + defb 00000000b + defb 00000000b + + ; code=32, hex=0x20, ascii=" " + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=33, hex=0x21, ascii="!" + defb 00010000b + defb 00111000b + defb 00111000b + defb 00010000b + defb 00010000b + defb 00000000b + defb 00010000b + defb 00000000b + + ; code=34, hex=0x22, ascii=""" + defb 01101100b + defb 01101100b + defb 01001000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=35, hex=0x23, ascii="#" + defb 00000000b + defb 00101000b + defb 01111100b + defb 00101000b + defb 00101000b + defb 01111100b + defb 00101000b + defb 00000000b + + ; code=36, hex=0x24, ascii="$" + defb 00100000b + defb 00111000b + defb 01000000b + defb 00110000b + defb 00001000b + defb 01110000b + defb 00010000b + defb 00000000b + + ; code=37, hex=0x25, ascii="" + defb 01100100b + defb 01100100b + defb 00001000b + defb 00010000b + defb 00100000b + defb 01001100b + defb 01001100b + defb 00000000b + + ; code=38, hex=0x26, ascii="&" + defb 00100000b + defb 01010000b + defb 01010000b + defb 00100000b + defb 01010100b + defb 01001000b + defb 00110100b + defb 00000000b + + ; code=39, hex=0x27, ascii="'" + defb 00110000b + defb 00110000b + defb 00100000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=40, hex=0x28, ascii="(" + defb 00010000b + defb 00100000b + defb 00100000b + defb 00100000b + defb 00100000b + defb 00100000b + defb 00010000b + defb 00000000b + + ; code=41, hex=0x29, ascii=")" + defb 00100000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00100000b + defb 00000000b + + ; code=42, hex=0x2A, ascii="*" + defb 00000000b + defb 00101000b + defb 00111000b + defb 01111100b + defb 00111000b + defb 00101000b + defb 00000000b + defb 00000000b + + ; code=43, hex=0x2B, ascii="+" + defb 00000000b + defb 00010000b + defb 00010000b + defb 01111100b + defb 00010000b + defb 00010000b + defb 00000000b + defb 00000000b + + ; code=44, hex=0x2C, ascii="," + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00110000b + defb 00110000b + defb 00100000b + + ; code=45, hex=0x2D, ascii="-" + defb 00000000b + defb 00000000b + defb 00000000b + defb 01111100b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=46, hex=0x2E, ascii="." + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00110000b + defb 00110000b + defb 00000000b + + ; code=47, hex=0x2F, ascii="/" + defb 00000000b + defb 00000100b + defb 00001000b + defb 00010000b + defb 00100000b + defb 01000000b + defb 00000000b + defb 00000000b + + ; code=48, hex=0x30, ascii="0" + defb 00111000b + defb 01000100b + defb 01001100b + defb 01010100b + defb 01100100b + defb 01000100b + defb 00111000b + defb 00000000b + + ; code=49, hex=0x31, ascii="1" + defb 00010000b + defb 00110000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00111000b + defb 00000000b + + ; code=50, hex=0x32, ascii="2" + defb 00111000b + defb 01000100b + defb 00000100b + defb 00011000b + defb 00100000b + defb 01000000b + defb 01111100b + defb 00000000b + + ; code=51, hex=0x33, ascii="3" + defb 00111000b + defb 01000100b + defb 00000100b + defb 00111000b + defb 00000100b + defb 01000100b + defb 00111000b + defb 00000000b + + ; code=52, hex=0x34, ascii="4" + defb 00001000b + defb 00011000b + defb 00101000b + defb 01001000b + defb 01111100b + defb 00001000b + defb 00001000b + defb 00000000b + + ; code=53, hex=0x35, ascii="5" + defb 01111100b + defb 01000000b + defb 01000000b + defb 01111000b + defb 00000100b + defb 01000100b + defb 00111000b + defb 00000000b + + ; code=54, hex=0x36, ascii="6" + defb 00011000b + defb 00100000b + defb 01000000b + defb 01111000b + defb 01000100b + defb 01000100b + defb 00111000b + defb 00000000b + + ; code=55, hex=0x37, ascii="7" + defb 01111100b + defb 00000100b + defb 00001000b + defb 00010000b + defb 00100000b + defb 00100000b + defb 00100000b + defb 00000000b + + ; code=56, hex=0x38, ascii="8" + defb 00111000b + defb 01000100b + defb 01000100b + defb 00111000b + defb 01000100b + defb 01000100b + defb 00111000b + defb 00000000b + + ; code=57, hex=0x39, ascii="9" + defb 00111000b + defb 01000100b + defb 01000100b + defb 00111100b + defb 00000100b + defb 00001000b + defb 00110000b + defb 00000000b + + ; code=58, hex=0x3A, ascii=":" + defb 00000000b + defb 00000000b + defb 00110000b + defb 00110000b + defb 00000000b + defb 00110000b + defb 00110000b + defb 00000000b + + ; code=59, hex=0x3B, ascii=";" + defb 00000000b + defb 00000000b + defb 00110000b + defb 00110000b + defb 00000000b + defb 00110000b + defb 00110000b + defb 00100000b + + ; code=60, hex=0x3C, ascii="<" + defb 00001000b + defb 00010000b + defb 00100000b + defb 01000000b + defb 00100000b + defb 00010000b + defb 00001000b + defb 00000000b + + ; code=61, hex=0x3D, ascii="=" + defb 00000000b + defb 00000000b + defb 01111100b + defb 00000000b + defb 00000000b + defb 01111100b + defb 00000000b + defb 00000000b + + ; code=62, hex=0x3E, ascii=">" + defb 00100000b + defb 00010000b + defb 00001000b + defb 00000100b + defb 00001000b + defb 00010000b + defb 00100000b + defb 00000000b + + ; code=63, hex=0x3F, ascii="?" + defb 00111000b + defb 01000100b + defb 00000100b + defb 00011000b + defb 00010000b + defb 00000000b + defb 00010000b + defb 00000000b + + ; code=64, hex=0x40, ascii="@" + defb 00111000b + defb 01000100b + defb 01011100b + defb 01010100b + defb 01011100b + defb 01000000b + defb 00111000b + defb 00000000b + + ; code=65, hex=0x41, ascii="A" + defb 00111000b + defb 01000100b + defb 01000100b + defb 01000100b + defb 01111100b + defb 01000100b + defb 01000100b + defb 00000000b + + ; code=66, hex=0x42, ascii="B" + defb 01111000b + defb 01000100b + defb 01000100b + defb 01111000b + defb 01000100b + defb 01000100b + defb 01111000b + defb 00000000b + + ; code=67, hex=0x43, ascii="C" + defb 00111000b + defb 01000100b + defb 01000000b + defb 01000000b + defb 01000000b + defb 01000100b + defb 00111000b + defb 00000000b + + ; code=68, hex=0x44, ascii="D" + defb 01111000b + defb 01000100b + defb 01000100b + defb 01000100b + defb 01000100b + defb 01000100b + defb 01111000b + defb 00000000b + + ; code=69, hex=0x45, ascii="E" + defb 01111100b + defb 01000000b + defb 01000000b + defb 01111000b + defb 01000000b + defb 01000000b + defb 01111100b + defb 00000000b + + ; code=70, hex=0x46, ascii="F" + defb 01111100b + defb 01000000b + defb 01000000b + defb 01111000b + defb 01000000b + defb 01000000b + defb 01000000b + defb 00000000b + + ; code=71, hex=0x47, ascii="G" + defb 00111000b + defb 01000100b + defb 01000000b + defb 01011100b + defb 01000100b + defb 01000100b + defb 00111100b + defb 00000000b + + ; code=72, hex=0x48, ascii="H" + defb 01000100b + defb 01000100b + defb 01000100b + defb 01111100b + defb 01000100b + defb 01000100b + defb 01000100b + defb 00000000b + + ; code=73, hex=0x49, ascii="I" + defb 00111000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00111000b + defb 00000000b + + ; code=74, hex=0x4A, ascii="J" + defb 00000100b + defb 00000100b + defb 00000100b + defb 00000100b + defb 01000100b + defb 01000100b + defb 00111000b + defb 00000000b + + ; code=75, hex=0x4B, ascii="K" + defb 01000100b + defb 01001000b + defb 01010000b + defb 01100000b + defb 01010000b + defb 01001000b + defb 01000100b + defb 00000000b + + ; code=76, hex=0x4C, ascii="L" + defb 01000000b + defb 01000000b + defb 01000000b + defb 01000000b + defb 01000000b + defb 01000000b + defb 01111100b + defb 00000000b + + ; code=77, hex=0x4D, ascii="M" + defb 01000100b + defb 01101100b + defb 01010100b + defb 01000100b + defb 01000100b + defb 01000100b + defb 01000100b + defb 00000000b + + ; code=78, hex=0x4E, ascii="N" + defb 01000100b + defb 01100100b + defb 01010100b + defb 01001100b + defb 01000100b + defb 01000100b + defb 01000100b + defb 00000000b + + ; code=79, hex=0x4F, ascii="O" + defb 00111000b + defb 01000100b + defb 01000100b + defb 01000100b + defb 01000100b + defb 01000100b + defb 00111000b + defb 00000000b + + ; code=80, hex=0x50, ascii="P" + defb 01111000b + defb 01000100b + defb 01000100b + defb 01111000b + defb 01000000b + defb 01000000b + defb 01000000b + defb 00000000b + + ; code=81, hex=0x51, ascii="Q" + defb 00111000b + defb 01000100b + defb 01000100b + defb 01000100b + defb 01010100b + defb 01001000b + defb 00110100b + defb 00000000b + + ; code=82, hex=0x52, ascii="R" + defb 01111000b + defb 01000100b + defb 01000100b + defb 01111000b + defb 01001000b + defb 01000100b + defb 01000100b + defb 00000000b + + ; code=83, hex=0x53, ascii="S" + defb 00111000b + defb 01000100b + defb 01000000b + defb 00111000b + defb 00000100b + defb 01000100b + defb 00111000b + defb 00000000b + + ; code=84, hex=0x54, ascii="T" + defb 01111100b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00000000b + + ; code=85, hex=0x55, ascii="U" + defb 01000100b + defb 01000100b + defb 01000100b + defb 01000100b + defb 01000100b + defb 01000100b + defb 00111000b + defb 00000000b + + ; code=86, hex=0x56, ascii="V" + defb 01000100b + defb 01000100b + defb 01000100b + defb 01000100b + defb 01000100b + defb 00101000b + defb 00010000b + defb 00000000b + + ; code=87, hex=0x57, ascii="W" + defb 01000100b + defb 01000100b + defb 01010100b + defb 01010100b + defb 01010100b + defb 01010100b + defb 00101000b + defb 00000000b + + ; code=88, hex=0x58, ascii="X" + defb 01000100b + defb 01000100b + defb 00101000b + defb 00010000b + defb 00101000b + defb 01000100b + defb 01000100b + defb 00000000b + + ; code=89, hex=0x59, ascii="Y" + defb 01000100b + defb 01000100b + defb 01000100b + defb 00101000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00000000b + + ; code=90, hex=0x5A, ascii="Z" + defb 01111000b + defb 00001000b + defb 00010000b + defb 00100000b + defb 01000000b + defb 01000000b + defb 01111000b + defb 00000000b + + ; code=91, hex=0x5B, ascii="[" + defb 00111000b + defb 00100000b + defb 00100000b + defb 00100000b + defb 00100000b + defb 00100000b + defb 00111000b + defb 00000000b + + ; code=92, hex=0x5C, ascii="\" + defb 00000000b + defb 01000000b + defb 00100000b + defb 00010000b + defb 00001000b + defb 00000100b + defb 00000000b + defb 00000000b + + ; code=93, hex=0x5D, ascii="]" + defb 00111000b + defb 00001000b + defb 00001000b + defb 00001000b + defb 00001000b + defb 00001000b + defb 00111000b + defb 00000000b + + ; code=94, hex=0x5E, ascii="^" + defb 00010000b + defb 00101000b + defb 01000100b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=95, hex=0x5F, ascii="_" + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 11111100b + + ; code=96, hex=0x60, ascii="`" + defb 00110000b + defb 00110000b + defb 00010000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=97, hex=0x61, ascii="a" + defb 00000000b + defb 00000000b + defb 00111000b + defb 00000100b + defb 00111100b + defb 01000100b + defb 00111100b + defb 00000000b + + ; code=98, hex=0x62, ascii="b" + defb 01000000b + defb 01000000b + defb 01111000b + defb 01000100b + defb 01000100b + defb 01000100b + defb 01111000b + defb 00000000b + + ; code=99, hex=0x63, ascii="c" + defb 00000000b + defb 00000000b + defb 00111000b + defb 01000100b + defb 01000000b + defb 01000100b + defb 00111000b + defb 00000000b + + ; code=100, hex=0x64, ascii="d" + defb 00000100b + defb 00000100b + defb 00111100b + defb 01000100b + defb 01000100b + defb 01000100b + defb 00111100b + defb 00000000b + + ; code=101, hex=0x65, ascii="e" + defb 00000000b + defb 00000000b + defb 00111000b + defb 01000100b + defb 01111000b + defb 01000000b + defb 00111000b + defb 00000000b + + ; code=102, hex=0x66, ascii="f" + defb 00011000b + defb 00100000b + defb 00100000b + defb 01111000b + defb 00100000b + defb 00100000b + defb 00100000b + defb 00000000b + + ; code=103, hex=0x67, ascii="g" + defb 00000000b + defb 00000000b + defb 00111100b + defb 01000100b + defb 01000100b + defb 00111100b + defb 00000100b + defb 00111000b + + ; code=104, hex=0x68, ascii="h" + defb 01000000b + defb 01000000b + defb 01110000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 00000000b + + ; code=105, hex=0x69, ascii="i" + defb 00010000b + defb 00000000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00011000b + defb 00000000b + + ; code=106, hex=0x6A, ascii="j" + defb 00001000b + defb 00000000b + defb 00011000b + defb 00001000b + defb 00001000b + defb 00001000b + defb 01001000b + defb 00110000b + + ; code=107, hex=0x6B, ascii="k" + defb 01000000b + defb 01000000b + defb 01001000b + defb 01010000b + defb 01100000b + defb 01010000b + defb 01001000b + defb 00000000b + + ; code=108, hex=0x6C, ascii="l" + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00011000b + defb 00000000b + + ; code=109, hex=0x6D, ascii="m" + defb 00000000b + defb 00000000b + defb 01101000b + defb 01010100b + defb 01010100b + defb 01000100b + defb 01000100b + defb 00000000b + + ; code=110, hex=0x6E, ascii="n" + defb 00000000b + defb 00000000b + defb 01110000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 00000000b + + ; code=111, hex=0x6F, ascii="o" + defb 00000000b + defb 00000000b + defb 00111000b + defb 01000100b + defb 01000100b + defb 01000100b + defb 00111000b + defb 00000000b + + ; code=112, hex=0x70, ascii="p" + defb 00000000b + defb 00000000b + defb 01111000b + defb 01000100b + defb 01000100b + defb 01000100b + defb 01111000b + defb 01000000b + + ; code=113, hex=0x71, ascii="q" + defb 00000000b + defb 00000000b + defb 00111100b + defb 01000100b + defb 01000100b + defb 01000100b + defb 00111100b + defb 00000100b + + ; code=114, hex=0x72, ascii="r" + defb 00000000b + defb 00000000b + defb 01011000b + defb 00100100b + defb 00100000b + defb 00100000b + defb 01110000b + defb 00000000b + + ; code=115, hex=0x73, ascii="s" + defb 00000000b + defb 00000000b + defb 00111000b + defb 01000000b + defb 00111000b + defb 00000100b + defb 00111000b + defb 00000000b + + ; code=116, hex=0x74, ascii="t" + defb 00000000b + defb 00100000b + defb 01111000b + defb 00100000b + defb 00100000b + defb 00101000b + defb 00010000b + defb 00000000b + + ; code=117, hex=0x75, ascii="u" + defb 00000000b + defb 00000000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 01011000b + defb 00101000b + defb 00000000b + + ; code=118, hex=0x76, ascii="v" + defb 00000000b + defb 00000000b + defb 01000100b + defb 01000100b + defb 01000100b + defb 00101000b + defb 00010000b + defb 00000000b + + ; code=119, hex=0x77, ascii="w" + defb 00000000b + defb 00000000b + defb 01000100b + defb 01000100b + defb 01010100b + defb 01111100b + defb 00101000b + defb 00000000b + + ; code=120, hex=0x78, ascii="x" + defb 00000000b + defb 00000000b + defb 01001000b + defb 01001000b + defb 00110000b + defb 01001000b + defb 01001000b + defb 00000000b + + ; code=121, hex=0x79, ascii="y" + defb 00000000b + defb 00000000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 00111000b + defb 00010000b + defb 01100000b + + ; code=122, hex=0x7A, ascii="z" + defb 00000000b + defb 00000000b + defb 01111000b + defb 00001000b + defb 00110000b + defb 01000000b + defb 01111000b + defb 00000000b + + ; code=123, hex=0x7B, ascii="{" + defb 00011000b + defb 00100000b + defb 00100000b + defb 01100000b + defb 00100000b + defb 00100000b + defb 00011000b + defb 00000000b + + ; code=124, hex=0x7C, ascii="|" + defb 00010000b + defb 00010000b + defb 00010000b + defb 00000000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00000000b + + ; code=125, hex=0x7D, ascii="}" + defb 00110000b + defb 00001000b + defb 00001000b + defb 00001100b + defb 00001000b + defb 00001000b + defb 00110000b + defb 00000000b + + ; code=126, hex=0x7E, ascii="~" + defb 00101000b + defb 01010000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=127, hex=0x7F, ascii="^?" + defb 00010000b + defb 00111000b + defb 01101100b + defb 01000100b + defb 01000100b + defb 01111100b + defb 00000000b + defb 00000000b + + ; code=128, hex=0x80, ascii="!^@" + defb 00111000b + defb 01000100b + defb 01000000b + defb 01000000b + defb 01000100b + defb 00111000b + defb 00010000b + defb 00110000b + + ; code=129, hex=0x81, ascii="!^A" + defb 01001000b + defb 00000000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 01011000b + defb 00101000b + defb 00000000b + + ; code=130, hex=0x82, ascii="!^B" + defb 00001100b + defb 00000000b + defb 00111000b + defb 01000100b + defb 01111000b + defb 01000000b + defb 00111000b + defb 00000000b + + ; code=131, hex=0x83, ascii="!^C" + defb 00111000b + defb 00000000b + defb 00111000b + defb 00000100b + defb 00111100b + defb 01000100b + defb 00111100b + defb 00000000b + + ; code=132, hex=0x84, ascii="!^D" + defb 00101000b + defb 00000000b + defb 00111000b + defb 00000100b + defb 00111100b + defb 01000100b + defb 00111100b + defb 00000000b + + ; code=133, hex=0x85, ascii="!^E" + defb 00110000b + defb 00000000b + defb 00111000b + defb 00000100b + defb 00111100b + defb 01000100b + defb 00111100b + defb 00000000b + + ; code=134, hex=0x86, ascii="!^F" + defb 00111000b + defb 00101000b + defb 00111000b + defb 00000100b + defb 00111100b + defb 01000100b + defb 00111100b + defb 00000000b + + ; code=135, hex=0x87, ascii="!^G" + defb 00000000b + defb 00111000b + defb 01000100b + defb 01000000b + defb 01000100b + defb 00111000b + defb 00010000b + defb 00110000b + + ; code=136, hex=0x88, ascii="!^H" + defb 00111000b + defb 00000000b + defb 00111000b + defb 01000100b + defb 01111000b + defb 01000000b + defb 00111000b + defb 00000000b + + ; code=137, hex=0x89, ascii="!^I" + defb 00101000b + defb 00000000b + defb 00111000b + defb 01000100b + defb 01111000b + defb 01000000b + defb 00111000b + defb 00000000b + + ; code=138, hex=0x8A, ascii="!^J" + defb 00110000b + defb 00000000b + defb 00111000b + defb 01000100b + defb 01111000b + defb 01000000b + defb 00111000b + defb 00000000b + + ; code=139, hex=0x8B, ascii="!^K" + defb 00101000b + defb 00000000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00011000b + defb 00000000b + + ; code=140, hex=0x8C, ascii="!^L" + defb 00010000b + defb 00101000b + defb 00000000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00011000b + defb 00000000b + + ; code=141, hex=0x8D, ascii="!^M" + defb 00100000b + defb 00000000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00011000b + defb 00000000b + + ; code=142, hex=0x8E, ascii="!^N" + defb 00101000b + defb 00000000b + defb 00010000b + defb 00101000b + defb 01000100b + defb 01111100b + defb 01000100b + defb 00000000b + + ; code=143, hex=0x8F, ascii="!^O" + defb 00111000b + defb 00101000b + defb 00111000b + defb 01101100b + defb 01000100b + defb 01111100b + defb 01000100b + defb 00000000b + + ; code=144, hex=0x90, ascii="!^P" + defb 00001100b + defb 00000000b + defb 01111100b + defb 01000000b + defb 01111000b + defb 01000000b + defb 01111100b + defb 00000000b + + ; code=145, hex=0x91, ascii="!^Q" + defb 00000000b + defb 00000000b + defb 01111000b + defb 00010100b + defb 01111100b + defb 01010000b + defb 00111100b + defb 00000000b + + ; code=146, hex=0x92, ascii="!^R" + defb 00111100b + defb 01010000b + defb 01010000b + defb 01111100b + defb 01010000b + defb 01010000b + defb 01011100b + defb 00000000b + + ; code=147, hex=0x93, ascii="!^S" + defb 00111000b + defb 00000000b + defb 00110000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 00110000b + defb 00000000b + + ; code=148, hex=0x94, ascii="!^T" + defb 00101000b + defb 00000000b + defb 00110000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 00110000b + defb 00000000b + + ; code=149, hex=0x95, ascii="!^U" + defb 01100000b + defb 00000000b + defb 00110000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 00110000b + defb 00000000b + + ; code=150, hex=0x96, ascii="!^V" + defb 00111000b + defb 00000000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 01011000b + defb 00101000b + defb 00000000b + + ; code=151, hex=0x97, ascii="!^W" + defb 01100000b + defb 00000000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 01011000b + defb 00101000b + defb 00000000b + + ; code=152, hex=0x98, ascii="!^X" + defb 00101000b + defb 00000000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 00111000b + defb 00010000b + defb 01100000b + + ; code=153, hex=0x99, ascii="!^Y" + defb 01001000b + defb 00110000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 00110000b + defb 00000000b + + ; code=154, hex=0x9A, ascii="!^Z" + defb 00101000b + defb 00000000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 00110000b + defb 00000000b + + ; code=155, hex=0x9B, ascii="!^[" + defb 00000000b + defb 00010000b + defb 00111000b + defb 01000000b + defb 01000000b + defb 00111000b + defb 00010000b + defb 00000000b + + ; code=156, hex=0x9C, ascii="!^\" + defb 00011000b + defb 00100100b + defb 00100000b + defb 01111000b + defb 00100000b + defb 00100100b + defb 01011100b + defb 00000000b + + ; code=157, hex=0x9D, ascii="!^]" + defb 01000100b + defb 00101000b + defb 00010000b + defb 01111100b + defb 00010000b + defb 01111100b + defb 00010000b + defb 00000000b + + ; code=158, hex=0x9E, ascii="!^^" + defb 01100000b + defb 01010000b + defb 01010000b + defb 01101000b + defb 01011100b + defb 01001000b + defb 01001000b + defb 00000000b + + ; code=159, hex=0x9F, ascii="!^_" + defb 00001000b + defb 00010100b + defb 00010000b + defb 00111000b + defb 00010000b + defb 00010000b + defb 01010000b + defb 00100000b + + ; code=160, hex=0xA0, ascii="! " + defb 00011000b + defb 00000000b + defb 00111000b + defb 00000100b + defb 00111100b + defb 01000100b + defb 00111100b + defb 00000000b + + ; code=161, hex=0xA1, ascii="!!" + defb 00011000b + defb 00000000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00011000b + defb 00000000b + + ; code=162, hex=0xA2, ascii="!"" + defb 00011000b + defb 00000000b + defb 00110000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 00110000b + defb 00000000b + + ; code=163, hex=0xA3, ascii="!#" + defb 00011000b + defb 00000000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 01011000b + defb 00101000b + defb 00000000b + + ; code=164, hex=0xA4, ascii="!$" + defb 00101000b + defb 01010000b + defb 00000000b + defb 01110000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 00000000b + + ; code=165, hex=0xA5, ascii="!" + defb 00101000b + defb 01010000b + defb 00000000b + defb 01001000b + defb 01101000b + defb 01011000b + defb 01001000b + defb 00000000b + + ; code=166, hex=0xA6, ascii="!&" + defb 00111000b + defb 00000100b + defb 00111100b + defb 01000100b + defb 00111100b + defb 00000000b + defb 00111100b + defb 00000000b + + ; code=167, hex=0xA7, ascii="!'" + defb 00110000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 00110000b + defb 00000000b + defb 01111000b + defb 00000000b + + ; code=168, hex=0xA8, ascii="!(" + defb 00010000b + defb 00000000b + defb 00010000b + defb 00110000b + defb 01000000b + defb 01000100b + defb 00111000b + defb 00000000b + + ; code=169, hex=0xA9, ascii="!)" + defb 00000000b + defb 00000000b + defb 01111100b + defb 01000000b + defb 01000000b + defb 01000000b + defb 00000000b + defb 00000000b + + ; code=170, hex=0xAA, ascii="!*" + defb 00000000b + defb 00000000b + defb 11111100b + defb 00000100b + defb 00000100b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=171, hex=0xAB, ascii="!+" + defb 01000000b + defb 01001000b + defb 01010000b + defb 00111000b + defb 01000100b + defb 00001000b + defb 00011100b + defb 00000000b + + ; code=172, hex=0xAC, ascii="!," + defb 01000000b + defb 01001000b + defb 01010000b + defb 00101100b + defb 01010100b + defb 00011100b + defb 00000100b + defb 00000000b + + ; code=173, hex=0xAD, ascii="!-" + defb 00010000b + defb 00000000b + defb 00010000b + defb 00010000b + defb 00111000b + defb 00111000b + defb 00010000b + defb 00000000b + + ; code=174, hex=0xAE, ascii="!." + defb 00000000b + defb 00000000b + defb 00100100b + defb 01001000b + defb 00100100b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=175, hex=0xAF, ascii="!/" + defb 00000000b + defb 00000000b + defb 01001000b + defb 00100100b + defb 01001000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=176, hex=0xB0, ascii="!0" + defb 01010100b + defb 00000000b + defb 10101000b + defb 00000000b + defb 01010100b + defb 00000000b + defb 10101000b + defb 00000000b + + ; code=177, hex=0xB1, ascii="!1" + defb 01010100b + defb 10101000b + defb 01010100b + defb 10101000b + defb 01010100b + defb 10101000b + defb 01010100b + defb 10101000b + + ; code=178, hex=0xB2, ascii="!2" + defb 10101000b + defb 11111100b + defb 01010100b + defb 11111100b + defb 10101000b + defb 11111100b + defb 01010100b + defb 11111100b + + ; code=180, hex=0xB4, ascii="!4" + defb 00010000b + defb 00010000b + defb 00010000b + defb 11110000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + + ; code=181, hex=0xB5, ascii="!5" + defb 00010000b + defb 11110000b + defb 00010000b + defb 11110000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + + ; code=182, hex=0xB6, ascii="!6" + defb 01010000b + defb 01010000b + defb 01010000b + defb 11010000b + defb 01010000b + defb 01010000b + defb 01010000b + defb 01010000b + + ; code=183, hex=0xB7, ascii="!7" + defb 00000000b + defb 00000000b + defb 00000000b + defb 11110000b + defb 01010000b + defb 01010000b + defb 01010000b + defb 01010000b + + ; code=184, hex=0xB8, ascii="!8" + defb 00000000b + defb 11110000b + defb 00010000b + defb 11110000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + + ; code=185, hex=0xB9, ascii="!9" + defb 01010000b + defb 11010000b + defb 00010000b + defb 11010000b + defb 01010000b + defb 01010000b + defb 01010000b + defb 01010000b + + ; code=186, hex=0xBA, ascii="!:" + defb 01010000b + defb 01010000b + defb 01010000b + defb 01010000b + defb 01010000b + defb 01010000b + defb 01010000b + defb 01010000b + + ; code=187, hex=0xBB, ascii="!;" + defb 00000000b + defb 11110000b + defb 00010000b + defb 11010000b + defb 01010000b + defb 01010000b + defb 01010000b + defb 01010000b + + ; code=188, hex=0xBC, ascii="!<" + defb 01010000b + defb 11010000b + defb 00010000b + defb 11110000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=189, hex=0xBD, ascii="!=" + defb 01010000b + defb 01010000b + defb 01010000b + defb 11110000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=190, hex=0xBE, ascii="!>" + defb 00010000b + defb 11110000b + defb 00010000b + defb 11110000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=191, hex=0xBF, ascii="!?" + defb 00000000b + defb 00000000b + defb 00000000b + defb 11110000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + + ; code=192, hex=0xC0, ascii="!@" + defb 00010000b + defb 00010000b + defb 00010000b + defb 00011100b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=193, hex=0xC1, ascii="!A" + defb 00010000b + defb 00010000b + defb 00010000b + defb 11111100b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=194, hex=0xC2, ascii="!B" + defb 00000000b + defb 00000000b + defb 00000000b + defb 11111100b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + + ; code=195, hex=0xC3, ascii="!C" + defb 00010000b + defb 00010000b + defb 00010000b + defb 00011100b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + + ; code=196, hex=0xC4, ascii="!D" + defb 00000000b + defb 00000000b + defb 00000000b + defb 11111100b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=197, hex=0xC5, ascii="!E" + defb 00010000b + defb 00010000b + defb 00010000b + defb 11111100b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + + ; code=198, hex=0xC6, ascii="!F" + defb 00010000b + defb 00011100b + defb 00010000b + defb 00011100b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + + ; code=199, hex=0xC7, ascii="!G" + defb 01010000b + defb 01010000b + defb 01010000b + defb 01011100b + defb 01010000b + defb 01010000b + defb 01010000b + defb 01010000b + + ; code=200, hex=0xC8, ascii="!H" + defb 01010000b + defb 01011100b + defb 01000000b + defb 01111100b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=201, hex=0xC9, ascii="!I" + defb 00000000b + defb 01111100b + defb 01000000b + defb 01011100b + defb 01010000b + defb 01010000b + defb 01010000b + defb 01010000b + + ; code=202, hex=0xCA, ascii="!J" + defb 01010000b + defb 11011100b + defb 00000000b + defb 11111100b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=203, hex=0xCB, ascii="!K" + defb 00000000b + defb 11111100b + defb 00000000b + defb 11011100b + defb 01010000b + defb 01010000b + defb 01010000b + defb 01010000b + + ; code=204, hex=0xCC, ascii="!L" + defb 01010000b + defb 01011100b + defb 01000000b + defb 01011100b + defb 01010000b + defb 01010000b + defb 01010000b + defb 01010000b + + ; code=205, hex=0xCD, ascii="!M" + defb 00000000b + defb 11111100b + defb 00000000b + defb 11111100b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=206, hex=0xCE, ascii="!N" + defb 01010000b + defb 11011100b + defb 00000000b + defb 11011100b + defb 01010000b + defb 01010000b + defb 01010000b + defb 01010000b + + ; code=207, hex=0xCF, ascii="!O" + defb 00010000b + defb 11111100b + defb 00000000b + defb 11111100b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=208, hex=0xD0, ascii="!P" + defb 01010000b + defb 01010000b + defb 01010000b + defb 11111100b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=209, hex=0xD1, ascii="!Q" + defb 00000000b + defb 11111100b + defb 00000000b + defb 11111100b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + + ; code=210, hex=0xD2, ascii="!R" + defb 00000000b + defb 00000000b + defb 00000000b + defb 11111100b + defb 01010000b + defb 01010000b + defb 01010000b + defb 01010000b + + ; code=211, hex=0xD3, ascii="!S" + defb 01010000b + defb 01010000b + defb 01010000b + defb 01111100b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=212, hex=0xD4, ascii="!T" + defb 00010000b + defb 00011100b + defb 00010000b + defb 00011100b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=213, hex=0xD5, ascii="!U" + defb 00000000b + defb 00011100b + defb 00010000b + defb 00011100b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + + ; code=214, hex=0xD6, ascii="!V" + defb 00000000b + defb 00000000b + defb 00000000b + defb 01111100b + defb 01010000b + defb 01010000b + defb 01010000b + defb 01010000b + + ; code=215, hex=0xD7, ascii="!W" + defb 01010000b + defb 01010000b + defb 01010000b + defb 11011100b + defb 01010000b + defb 01010000b + defb 01010000b + defb 01010000b + + ; code=216, hex=0xD8, ascii="!X" + defb 00010000b + defb 11111100b + defb 00000000b + defb 11111100b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + + ; code=217, hex=0xD9, ascii="!Y" + defb 00010000b + defb 00010000b + defb 00010000b + defb 11110000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=218, hex=0xDA, ascii="!Z" + defb 00000000b + defb 00000000b + defb 00000000b + defb 00011100b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + + ; code=219, hex=0xDB, ascii="![" + defb 11111100b + defb 11111100b + defb 11111100b + defb 11111100b + defb 11111100b + defb 11111100b + defb 11111100b + defb 11111100b + + ; code=220, hex=0xDC, ascii="!\" + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 11111100b + defb 11111100b + defb 11111100b + defb 11111100b + + ; code=221, hex=0xDD, ascii="!]" + defb 11100000b + defb 11100000b + defb 11100000b + defb 11100000b + defb 11100000b + defb 11100000b + defb 11100000b + defb 11100000b + + ; code=222, hex=0xDE, ascii="!^" + defb 00011100b + defb 00011100b + defb 00011100b + defb 00011100b + defb 00011100b + defb 00011100b + defb 00011100b + defb 00011100b + + ; code=223, hex=0xDF, ascii="!_" + defb 11111100b + defb 11111100b + defb 11111100b + defb 11111100b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=224, hex=0xE0, ascii="!`" + defb 00000000b + defb 00000000b + defb 00110100b + defb 01001000b + defb 01001000b + defb 00110100b + defb 00000000b + defb 00000000b + + ; code=225, hex=0xE1, ascii="!a" + defb 00000000b + defb 01110000b + defb 01001000b + defb 01110000b + defb 01001000b + defb 01001000b + defb 01110000b + defb 01000000b + + ; code=226, hex=0xE2, ascii="!b" + defb 01111000b + defb 01001000b + defb 01000000b + defb 01000000b + defb 01000000b + defb 01000000b + defb 01000000b + defb 00000000b + + ; code=227, hex=0xE3, ascii="!c" + defb 00000000b + defb 01111100b + defb 00101000b + defb 00101000b + defb 00101000b + defb 00101000b + defb 00101000b + defb 00000000b + + ; code=228, hex=0xE4, ascii="!d" + defb 01111000b + defb 01001000b + defb 00100000b + defb 00010000b + defb 00100000b + defb 01001000b + defb 01111000b + defb 00000000b + + ; code=229, hex=0xE5, ascii="!e" + defb 00000000b + defb 00000000b + defb 00111100b + defb 01001000b + defb 01001000b + defb 00110000b + defb 00000000b + defb 00000000b + + ; code=230, hex=0xE6, ascii="!f" + defb 00000000b + defb 00000000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 01110000b + defb 01000000b + defb 01000000b + + ; code=231, hex=0xE7, ascii="!g" + defb 00000000b + defb 00000000b + defb 00101000b + defb 01010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00000000b + + ; code=232, hex=0xE8, ascii="!h" + defb 00111000b + defb 00010000b + defb 00111000b + defb 01000100b + defb 00111000b + defb 00010000b + defb 00111000b + defb 00000000b + + ; code=233, hex=0xE9, ascii="!i" + defb 00110000b + defb 01001000b + defb 01001000b + defb 01111000b + defb 01001000b + defb 01001000b + defb 00110000b + defb 00000000b + + ; code=234, hex=0xEA, ascii="!j" + defb 00000000b + defb 00111000b + defb 01000100b + defb 01000100b + defb 00101000b + defb 00101000b + defb 01101100b + defb 00000000b + + ; code=235, hex=0xEB, ascii="!k" + defb 00110000b + defb 01000000b + defb 00100000b + defb 00010000b + defb 00111000b + defb 01001000b + defb 00110000b + defb 00000000b + + ; code=236, hex=0xEC, ascii="!l" + defb 00000000b + defb 00000000b + defb 00101000b + defb 01010100b + defb 01010100b + defb 00101000b + defb 00000000b + defb 00000000b + + ; code=237, hex=0xED, ascii="!m" + defb 00000000b + defb 00010000b + defb 00111000b + defb 01010100b + defb 01010100b + defb 00111000b + defb 00010000b + defb 00000000b + + ; code=238, hex=0xEE, ascii="!n" + defb 00000000b + defb 00111000b + defb 01000000b + defb 01111000b + defb 01000000b + defb 00111000b + defb 00000000b + defb 00000000b + + ; code=239, hex=0xEF, ascii="!o" + defb 00000000b + defb 00110000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 01001000b + defb 00000000b + defb 00000000b + + ; code=240, hex=0xF0, ascii="!p" + defb 00000000b + defb 01111000b + defb 00000000b + defb 01111000b + defb 00000000b + defb 01111000b + defb 00000000b + defb 00000000b + + ; code=241, hex=0xF1, ascii="!q" + defb 00000000b + defb 00010000b + defb 00111000b + defb 00010000b + defb 00000000b + defb 00111000b + defb 00000000b + defb 00000000b + + ; code=242, hex=0xF2, ascii="!r" + defb 01000000b + defb 00110000b + defb 00001000b + defb 00110000b + defb 01000000b + defb 00000000b + defb 01111000b + defb 00000000b + + ; code=243, hex=0xF3, ascii="!s" + defb 00001000b + defb 00110000b + defb 01000000b + defb 00110000b + defb 00001000b + defb 00000000b + defb 01111000b + defb 00000000b + + ; code=244, hex=0xF4, ascii="!t" + defb 00000000b + defb 00001000b + defb 00010100b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + + ; code=245, hex=0xF5, ascii="!u" + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 00010000b + defb 01010000b + defb 00100000b + defb 00000000b + + ; code=246, hex=0xF6, ascii="!v" + defb 00000000b + defb 00010000b + defb 00000000b + defb 01111100b + defb 00000000b + defb 00010000b + defb 00000000b + defb 00000000b + + ; code=247, hex=0xF7, ascii="!w" + defb 00000000b + defb 00101000b + defb 01010000b + defb 00000000b + defb 00101000b + defb 01010000b + defb 00000000b + defb 00000000b + + ; code=248, hex=0xF8, ascii="!x" + defb 00110000b + defb 01001000b + defb 01001000b + defb 00110000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=249, hex=0xF9, ascii="!y" + defb 00000000b + defb 00000000b + defb 00000000b + defb 00110000b + defb 00110000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=250, hex=0xFA, ascii="!z" + defb 00000000b + defb 00000000b + defb 00000000b + defb 00100000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=251, hex=0xFB, ascii="!{" + defb 00000000b + defb 00011100b + defb 00010000b + defb 00010000b + defb 01010000b + defb 01010000b + defb 00100000b + defb 00000000b + + ; code=252, hex=0xFC, ascii="!|" + defb 01010000b + defb 00101000b + defb 00101000b + defb 00101000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=253, hex=0xFD, ascii="!}" + defb 01100000b + defb 00010000b + defb 00100000b + defb 01110000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + + ; code=254, hex=0xFE, ascii="!~" + defb 00000000b + defb 00000000b + defb 01111000b + defb 01111000b + defb 01111000b + defb 01111000b + defb 00000000b + defb 00000000b + + ; code=255, hex=0xFF, ascii="!^Ÿ" + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b + defb 00000000b \ No newline at end of file diff --git a/OperatingSystem/iictest/test.asm b/OperatingSystem/iictest/test.asm index c2c8974..d88e00b 100644 --- a/OperatingSystem/iictest/test.asm +++ b/OperatingSystem/iictest/test.asm @@ -1,55 +1,303 @@ .include "include/extern_symbols.s" ;include monitor symbols. org 0x8000 -IIC_RTC equ 11010000b -;Testing code - - CALL iic_init - - ;JP PROMPT_BEGIN - - LD BC,$1000 - CALL _pause_loop - - JP PROMPT_BEGIN - - LD DE, 0xC000 ; Set I2C Buffer Location - LD A,0x00 ; store string in buffer - LD (DE),A - LD B, IIC_RTC ; Set I2C Address - LD A, 1 ; Set I2C Buffer length - call iic_send - - - - - JP PROMPT_BEGIN - -.include "include/kdrv_iic.s" - - -;------------------------------------------------------------------------------ -; PRINTINLINE + call TermInit + ret +;------------------------------------------------- +; Z8C/MEGA80 VDP Console IO Functions +; by Dennis Gunia 2022/02 +; Version 0.1 ; -; String output function -; -; Prints in-line data (bytes immediately following the PRINTINLINE call) -; until a string terminator is encountered (0 - null char). -;------------------------------------------------------------------------------ -PRINTINLINE: - EX (SP),HL ; PUSH HL and put RET ADDress into HL - PUSH AF - PUSH BC -nxtILC: - LD A,(HL) - CP 0 - JR Z,endPrint - CALL print_char - INC HL - JR nxtILC -endPrint: - INC HL ; Get past "null" terminator - POP BC - POP AF - EX (SP),HL ; PUSH new RET ADDress on stack and restore HL - RET \ No newline at end of file +; For Z8C Monitor +;------------------------------------------------- + +; Constant Values +TermVarMemoryLocation equ 0x40E0 + + +; Dynamic VARs +TermVarTemplate: + phase TermVarMemoryLocation ;Change pointers to this template to the specified location +TermCurrentX: ; Start sector + defb 0x01 +TermCurrentY: ; Start sector + defb 0x04 +TermCursorState: + defb 0x00 +TermCursorEnabled: + defb 0x00 +TermVarTemplateEnd: + dephase + + + +TermInit: + ; Copy TermVarTemplate to memory + LD HL, TermVarMemoryLocation ;Load destination into HL + LD BC, [TermVarTemplate] ;Load source into BC + LD DE, [TermVarTemplateEnd] ;Load end into DE +TermInit_copy_loop: + LD A,(BC) ;Copy value + LD (HL),A + INC BC ;Increment pointers + INC HL + PUSH HL ;Backup HL + SBC HL,DE ;Check if next pointer matches end + POP HL ;Restore HL + JP NZ, TermInit_copy_loop ;Loop if pointer != end + ; template copy done + + + ; install font + call setup_vars + ld hl, TmsFont + call TmsTextMode ; initialize text mode + + ld a, TmsDarkGreen ; set colors + call TmsBackground + ld a, TmsWhite + call TmsTextColor + + ld a, 0 ; put title at 11, 1 + ld e, 0 + call TmsTextPos + ld hl, TitleMessage ; output title + call TmsStrOut + + ld a, 0 ; put title at 11, 1 + ld e, 4 + call TmsTextPos + + + ret + +TermSetCursor: + ld a, (TermCurrentY) + ld e, a + ld a, (TermCurrentX) + + call TmsTextPos + ret + +TermPrintStr: + ; BC contains String offset + ; Prints null terminated string + PUSH AF + PUSH BC +TermPrintStr_LOOP: + LD A,(BC) + + ; Return if nullbyte + OR 0 + JR Z, TermPrintStr_EXIT + ; Print Char + CALL TermPrintChar + + ; INC BC and JP start of loop + INC BC + jp TermPrintStr_LOOP +TermPrintStr_EXIT: + POP BC + POP AF + RET + +TermPrintChar: + push AF + push BC + push DE + push HL + ; check if special char + cp 0x7F ; Backspace + jp z, TermPrintCharSPDelete + cp 13 + jp z, TermPrintCharSPCR + cp 10 + jp z, TermPrintCharSPLF + ; a has char + call TmsChrOut + ld a,(TermCurrentX) + inc a + cp 39 + jp z,TermPrintCharWrap; if line end + jp nc,TermPrintCharWrap; if line end + ld (TermCurrentX), a + call TermSetCursor + jp TermPrintCharDone +TermPrintCharWrap: + xor a + ld (TermCurrentX), a + ld a,(TermCurrentY) + cp 23 ; if already last line + jp z, TermPrintCharSPLFScroll + inc a + ld (TermCurrentY),a + call TermSetCursor + jp TermPrintCharDone +TermPrintCharSPDelete: + ld a,(TermCurrentX) + and a + jp z, TermPrintCharSPDeleteWrap ; if at pos X 0 then go previous line + dec a ; else decrement X + ld (TermCurrentX), a + call TermSetCursor + ld a, " " + call TmsChrOut + call TermSetCursor + jp TermPrintCharDone +TermPrintCharSPDeleteWrap: + ld a,39 + ld (TermCurrentX), a + ld a,(TermCurrentY) + dec a + ld (TermCurrentY),a + call TermSetCursor + ld a, " " + call TmsChrOut + call TermSetCursor + jp TermPrintCharDone + +TermPrintCharSPLF: ; linefeed + ld a,(TermCurrentY) + cp 23 ; if already last line + jp z, TermPrintCharSPLFScroll + inc a + ld (TermCurrentY),a + call TermSetCursor + jp TermPrintCharDone +TermPrintCharSPLFScroll: + call TermScroll + ld a,23 + ld (TermCurrentY),a + call TermSetCursor + jp TermPrintCharDone +TermPrintCharSPCR: ; linefeed + xor a + ld (TermCurrentX),a + call TermSetCursor + jp TermPrintCharDone + +TermPrintCharDone: + pop HL + pop DE + pop BC + pop AF + ret + +TermScroll: + ld bc, 0x3800 ; load start of text-buffer into pointer + +TermScrollLine: + ld h,b + ld l,c + + ld de, 40 ; line width + add hl, de + + ld a,l ; setup VDP address + out (0x81),a + ld a,h + and 3fh + out (0x81),a + call VDPWait + in a, (0x80) ; read byte + push af + + ld a,c ; setup VDP address + out (0x81),a + ld a,b + and 3fh + or 40h ; write bit + out (0x81),a + pop af + call VDPWait + out (0x80),a + + inc bc + + ld h,b + ld l,c + ld de, VDPTextBufferEnd ; buffer end + sbc hl, de + + jp nz, TermScrollLine + + ; clear last line + ld bc,920 + ld a,c ; setup VDP address + out (0x81),a + ld a,b + and 3fh + or 40h ; write bit + out (0x81),a + ld c,40 +TermScrollClearLine: + ld bc, 0x3800 + 920 +TermScrollClearLineLoop: + + ld a,c ; setup VDP addressh + out (0x81),a + ld a,b + and 3fh + or 40h ; write bit + out (0x81),a + ld a, ' ' + out (0x80),a + call VDPWait + + inc bc + ld h,b + ld l,c + ld de, 0x3800 + 960 ; buffer end + sbc hl, de + + jp nz, TermScrollClearLineLoop + ret + +VDPWait: + nop + nop + nop + nop + ret + +VDPTextBufferStart equ 0 +VDPTextBufferEnd equ 0x3800 + 920 + +TitleMessage: + db ' Z8C Mk IV - A Z80 Homebrew Computer ' + db ' ROM Ver. 1.0 by Dennis Gunia (2022) ' + db ' 48k RAM - 4MHz Z80 CPU ',0 + +TmsSubs: + .include "tms.s" ; TMS graphics routines +; .include "utility.s" ; BDOS utility routines + .include "font1.s" + + +TermClear: + ld bc, 0x3800 +TermClearLoop: + ld a,c ; setup VDP addressh + out (0x81),a + ld a,b + and 3fh + or 40h ; write bit + out (0x81),a + ld a, ' ' + out (0x80),a + call VDPWait + inc bc + + ld h,b + ld l,c + ld de, 0x3800 + 960 ; buffer end + sbc hl, de + jp nz, TermClearLoop + + xor a + ld (TermCurrentX), a + ld (TermCurrentY), a + + call TermSetCursor + + ret \ No newline at end of file diff --git a/OperatingSystem/iictest/zout/test.bin b/OperatingSystem/iictest/zout/test.bin index 39693c8..cd9762f 100644 Binary files a/OperatingSystem/iictest/zout/test.bin and b/OperatingSystem/iictest/zout/test.bin differ diff --git a/OperatingSystem/iictest/zout/test.hex b/OperatingSystem/iictest/zout/test.hex index d361dd1..72ba4cc 100644 --- a/OperatingSystem/iictest/zout/test.hex +++ b/OperatingSystem/iictest/zout/test.hex @@ -1,21 +1,210 @@ -:10800000CD1C80010010CDEF80C399001100C03E4F -:10801000001206D03E01CD5E80C399003ECFD3F65C -:108020003EF5D3F63E00D3F4010010CDEF803E02C2 -:10803000D3F4010010CDEF803E80D3F3CD09813E13 -:1080400055D3F2CD09813EA0D3F3CD09813E183E30 -:1080500000D3F2CD09813EC1D3F3CD0981C9C5F565 -:10806000CDE18078D3F2CD09813EC5D3F3F14F0C39 -:10807000DBF3CB7F20FACB6720091A130D2804D33A -:10808000F218ED3EC3D3F3CD0981C1C9D5C5F5784A -:10809000F601D3F2CD0981CDE1803EC5D3F3F14F96 -:1080A0000CDBF3CB7F20FACB5F201C0D793D28063B -:1080B000DBF2121318EB3E40D3F3CD0981DBF21251 -:1080C00013DBF3CB7F20FA003EC3D3F3CD0981DB72 -:1080D000F2CD098112C1D1C9F5DBF3CB7F20FAF1D2 -:1080E000C9F5DBF3F5CDE702F1CB4728F5F1C9F58A -:1080F000C5C1C5C10B79B0C2F080F1C9DBF3CB4774 -:10810000C03EC3D3F3000018F300000000000000DD -:1081100000F5F1F5F1F5F1F5F1F5F1F5F1C9E3F55A -:10812000C57EFE002806CDB7022318F523C1F1E372 -:01813000C985 +:10800000CD0880C90104000021E04001048011E492 +:10801000400A770323E5ED52E1C21180CDF18121C1 +:10802000E084CD37833E0CCD9C823E0FCD4D843E07 +:10803000001E00CD6084216981CD77843E001E043E +:10804000CD6084C93AE1405F3AE040CD6084C9F533 +:10805000C50AF6002807CD608003C35180C1F1C96D +:10806000F5C5D5E5FE7FCAA180FE0DCAF480FE0AE3 +:10807000CAD480CD80823AE0403CFE27CA8B80D2B1 +:108080008B8032E040CD4480C3FE80AF32E0403A86 +:10809000E140FE17CAE6803C32E140CD4480C3FE99 +:1080A000803AE040A7CABA803D32E040CD44803EED +:1080B00020CD8082CD4480C3FE803E2732E0403A0E +:1080C000E1403D32E140CD44803E20CD8082CD4430 +:1080D00080C3FE803AE140FE17CAE6803C32E140B0 +:1080E000CD4480C3FE80CD03813E1732E140CD44B4 +:1080F00080C3FE80AF32E040CD4480C3FE80E1D13A +:10810000C1F1C90100386069112800197DD3817C53 +:10811000E63FD381CD6481DB80F579D38178E63F7A +:10812000F640D381F1CD6481D38003606911983B1F +:10813000ED52C2068101980379D38178E63FF6407B +:10814000D3810E2801983B79D38178E63FF640D35E +:10815000813E20D380CD648103606911C03BED5224 +:10816000C24781C900000000C920205A3843204D71 +:108170006B204956202D2041205A383020486F6D01 +:10818000656272657720436F6D707574657220202B +:10819000202020524F4D205665722E20312E302047 +:1081A00062792044656E6E69732047756E6961203F +:1081B0002832303232292020202020202020202068 +:1081C000202034386B2052414D202D20344D487AE8 +:1081D000205A3830204350552020202020202020B5 +:1081E0002000E04000000038002000000018C03BE4 +:1081F000003EE03200E43E023201E43E003202E49E +:108200003E003203E43E003204E43E383205E43EF0 +:10821000003208E43E003209E43E003206E43E202B +:108220003207E43E00320AE43E18320BE43EC0322C +:108230000CE43E3B320DE4C9010A1F3E013201E469 +:10824000C921658206037E3200E4CD7682CD768236 +:10825000FA608211FFFFCD7682F81B7BB2C2568294 +:108260002310E3AFC9809810CD6C827BC5ED4B0025 +:10827000E40CED79C1C9C5ED4B00E40CED78C1C942 +:10828000C5ED4B00E4ED7910FEC1C9C5ED4B00E42E +:1082900010FEED78ED4B00E410FEC1C9E60F473A41 +:1082A0000EE4E6F0B0320EE41E87C36882E60347B0 +:1082B0003A02E4E6FCB03202E41E81C368823A026C +:1082C000E4F6203202E41E81C368823A02E4E6DF6B +:1082D0003202E41E81C368822180002202E47D1EF6 +:1082E00081CD68827C1E80CD68823E00CD9C823E1E +:1082F00000CD4D841100000100403E00CD3E84C9F8 +:10830000CDD882ED5B04E4CD178416061E000E0462 +:1083100006207BCD80823C10FA0DC210835F15C20F +:108320000E8321C8002202E4C34C83CDD88221C031 +:10833000002202E4C34C83E5CDD882E1ED5B08E482 +:10834000010008CD2F8421D0002202E43A06E4E6A1 +:10835000C03206E4573A07E4E63F3207E4CB12178F +:10836000CB12171E83CD6882AF3208E43A09E4E6E7 +:10837000383209E40F0F0F1E84CD6882C3CA83CD43 +:10838000D882ED5B04E4CD17840603AFCD80823C38 +:10839000C28C8310F721C0022202E4AF3206E4321D +:1083A00008E43A07E4E6203207E43EFFC2B1833E28 +:1083B0007F1E83CD68823A09E4E6203209E43E0755 +:1083C000C2C5833E031E84CD6882AF3204E43A0501 +:1083D000E4E63C3205E40F0F1E82CD68823A0CE4DD +:1083E000E680320CE4573A0DE4E67FCB12171E8587 +:1083F000CD6882AF320AE43A0BE4E638320BE40F80 +:108400000F0F1E86CD68821E813A02E4CD68823A43 +:1084100003E41E80C368827BCD6C827AE63FF6401F +:10842000CD6C82C97BCD6C827AE63FCD6C82C9CDA2 +:1084300017847ECD8082230B78B1C23284C9F5CDFA +:108440001784F1CD80820DC2438410F7C9878787D6 +:1084500087473A0EE4E60FB0320EE41E87C3688207 +:108460001600210000192929192929295F19ED5B16 +:1084700004E419EBC317847EFE00C8CD808223C3B9 +:108480007784CD808210FBC922A984C978FEC0D030 +:10849000CDCF8479E60706004F21B38409462A0828 +:1084A000E419EBCD2484CD8B82B000F5CD1784F197 +:1084B000C380828040201008040201F578FEC0D0FD +:1084C000CDCF842A06E419EBCD1784F1C3808278DE +:1084D0000F0F0FE61F5779E6F85F78E607B35FC91D +:1084E000000000000000000038446C445444380090 +:1084F000387C547C447C380000287C7C7C3810001C +:108500000010387C7C381000103838107C7C10004B +:108510000010387C7C103800000000303000000073 +:10852000FCFCFCCCCCFCFCFC00007848487800004B +:10853000FCFC84B4B484FCFC001C0C3448483000BF +:10854000384444381038100010181410307060008F +:108550000C342C342C6C60000054386C38540000FF +:108560002030383C38302000081838783818080097 +:1085700010387C107C381000282828282800280073 +:108580003C5454341414140038443028184438002F +:10859000000000000078780010387C107C3810381B +:1085A00010387C1010101000101010107C381000C3 +:1085B0000010187C181000000010307C30100000F3 +:1085C0000000004040407C000028287C2828000053 +:1085D000101038387C7C00007C7C3838101000008B +:1085E00000000000000000001038381010001000DB +:1085F0006C6C48000000000000287C28287C2800C3 +:10860000203840300870100064640810204C4C0082 +:10861000205050205448340030302000000000002A +:1086200010202020202010002010101010102000FA +:108630000028387C382800000010107C1010000042 +:1086400000000000003030200000007C000000002E +:10865000000000000030300000040810204000003E +:1086600038444C5464443800103010101010380056 +:108670003844041820407C0038440438044438004E +:10868000081828487C0808007C40407804443800DA +:1086900018204078444438007C0408102020200032 +:1086A00038444438444438003844443C04083000DA +:1086B000000030300030300000003030003030201A +:1086C000081020402010080000007C00007C000002 +:1086D000201008040810200038440418100010006E +:1086E00038445C545C403800384444447C44440082 +:1086F000784444784444780038444040404438004A +:1087000078444444444478007C40407840407C00B5 +:108710007C404078404040003844405C44443C0049 +:108720004444447C44444400381010101010380075 +:108730000404040444443800444850605048440051 +:108740004040404040407C00446C54444444440019 +:108750004464544C44444400384444444444380041 +:1087600078444478404040003844444454483400FD +:10877000784444784844440038444038044438003D +:108780007C1010101010100044444444444438003D +:10879000444444444428100044445454545428004D +:1087A0004444281028444400444444281010100035 +:1087B0007808102040407800382020202020380001 +:1087C0000040201008040000380808080808380095 +:1087D000102844000000000000000000000000FC21 +:1087E0003030100000000000000038043C443C0021 +:1087F0004040784444447800000038444044380005 +:1088000004043C4444443C000000384478403800B0 +:10881000182020782020200000003C44443C0438EC +:1088200040407048484848001000101010101800D0 +:108830000800180808084830404048506050480078 +:108840001010101010101800000068545444440018 +:10885000000070484848480000003844444438004C +:10886000000078444444784000003C4444443C04C4 +:1088700000005824202070000000384038043800E0 +:108880000020782020281000000048484858280080 +:10889000000044444428100000004444547C280054 +:1088A00000004848304848000000484848381060F8 +:1088B0000000780830407800182020602020180040 +:1088C00010101000101010003008080C08083000BC +:1088D000285000000000000010386C44447C000068 +:1088E0003844404044381030480048484858280030 +:1088F0000C00384478403800380038043C443C00D0 +:10890000280038043C443C00300038043C443C001F +:10891000382838043C443C00003844404438103087 +:10892000380038447840380028003844784038000F +:10893000300038447840380028001010101018001B +:10894000102800101010180020001010101018002F +:1089500028001028447C44003828386C447C4400AB +:108960000C007C4078407C00000078147C503C0077 +:108970003C50507C50505C00380030484848300033 +:1089800028003048484830006000304848483000EF +:10899000380048484858280060004848485828008F +:1089A0002800484848381060483048484848300057 +:1089B000280048484848300000103840403810002F +:1089C0001824207820245C004428107C107C10009F +:1089D000605050685C48480008141038101050204F +:1089E000180038043C443C00180010101010180007 +:1089F00018003048484830001800484848582800B7 +:108A000028500070484848002850004868584800DE +:108A100038043C443C003C00304848483000780072 +:108A2000100010304044380000007C4040400000FE +:108A30000000FC04040000004048503844081C00BA +:108A40004048502C541C04001000101038381000FE +:108A500000002448240000000000482448000000D2 +:108A60005400A8005400A80054A854A854A854A81E +:108A7000A8FC54FCA8FC54FC10101010101010108E +:108A8000101010F01010101010F010F01010101046 +:108A9000505050D050505050000000F050505050A6 +:108AA00000F010F01010101050D010D05050505056 +:108AB000505050505050505000F010D05050505026 +:108AC00050D010F000000000505050F000000000A6 +:108AD00010F010F000000000000000F01010101066 +:108AE0001010101C00000000101010FC000000000E +:108AF000000000FC101010101010101C10101010AE +:108B0000000000FC00000000101010FC10101010FD +:108B1000101C101C101010105050505C5050505031 +:108B2000505C407C00000000007C405C5050505085 +:108B300050DC00FC0000000000FC00DC50505050F5 +:108B4000505C405C5050505000FC00FC00000000A5 +:108B500050DC00DC5050505010FC00FC00000000C5 +:108B6000505050FC0000000000FC00FC10101010E1 +:108B7000000000FC505050505050507C000000004D +:108B8000101C101C00000000001C101C1010101005 +:108B90000000007C50505050505050DC505050500D +:108BA00010FC00FC10101010101010F0000000005D +:108BB0000000001C10101010FCFCFCFCFCFCFCFC79 +:108BC00000000000FCFCFCFCE0E0E0E0E0E0E0E0B5 +:108BD0001C1C1C1C1C1C1C1CFCFCFCFC00000000C5 +:108BE0000000344848340000007048704848704025 +:108BF0007848404040404000007C28282828280031 +:108C0000784820102048780000003C484830000098 +:108C100000004848487040400000285010101000E4 +:108C20003810384438103800304848784848300008 +:108C30000038444428286C00304020103848300068 +:108C400000002854542800000010385454381000F4 +:108C5000003840784038000000304848484800005C +:108C6000007800780078000000103810003800000C +:108C7000403008304000780008304030080078006C +:108C800000081410101010101010101010502000B8 +:108C90000010007C00100000002850002850000048 +:108CA0003048483000000000000000303000000074 +:108CB0000000002000000000001C10105050200098 +:108CC00050282828000000006010207000000000DC +:108CD00000007878787800000000000000000000B4 +:108CE00001003879D38178E63FF640D3813E20D326 +:108CF00080CD648103606911C03BED52C2E38CAF4B +:0A8D000032E04032E140CD4480C96A :00000001FF diff --git a/OperatingSystem/iictest/zout/test.lst b/OperatingSystem/iictest/zout/test.lst index 622dfcb..e7be74a 100644 --- a/OperatingSystem/iictest/zout/test.lst +++ b/OperatingSystem/iictest/zout/test.lst @@ -3,725 +3,4047 @@ 1: ;This file is generated by the build script. 2: ;Do not make any changes here! 3: - 4: - 0091 AY0_WRITE_REG equ 0x91 - 5: - 0312 A_RTS_OFF equ 0x312 - 6: - 031B A_RTS_ON equ 0x31B - 7: - 0239 CMD_DASM equ 0x239 - 8: - 012F CMD_EXEC equ 0x12F - 9: - 021D CMD_IO_READ equ 0x21D - 10: - 01F4 CMD_IO_WRITE equ 0x1F4 - 11: - 01B8 CMD_SET equ 0x1B8 - 12: - 01EE CMD_SET_END equ 0x1EE - 13: - 01D3 CMD_SET_LOOP equ 0x1D3 - 14: - 0272 CMD_SYNTAX_ERROR equ 0x272 - 15: - 014E CMD_VIEW equ 0x14E - 16: - 01B2 CMD_VIEW_END equ 0x1B2 - 17: - 0187 CMD_VIEW_ROW equ 0x187 - 18: - 0199 CMD_VIEW_ROW_LOOP equ 0x199 - 19: - 027E CONSOLE_INIT equ 0x27E - 20: - 027E CONSOLE_INIT_CTC equ 0x27E - 21: - 0286 CONSOLE_INIT_SIO equ 0x286 - 22: - 0000 CS_BANK equ 0x00 - 23: - 0004 CS_CTC_0 equ 0x04 - 24: - 0005 CS_CTC_1 equ 0x05 - 25: - 0006 CS_CTC_2 equ 0x06 - 26: - 0007 CS_CTC_3 equ 0x07 - 27: - 0001 CS_DIP equ 0x01 - 28: - 0033 CS_PIA_CR equ 0x33 - 29: - 0030 CS_PIA_PA equ 0x30 - 30: - 0031 CS_PIA_PB equ 0x31 - 31: - 0032 CS_PIA_PC equ 0x32 - 32: - 00F6 CS_PIO_AC equ 0xF6 - 33: - 00F4 CS_PIO_AD equ 0xF4 - 34: - 00F7 CS_PIO_BC equ 0xF7 - 35: - 00F5 CS_PIO_BD equ 0xF5 - 36: - 0009 CS_SIO_A_C equ 0x09 - 37: - 0008 CS_SIO_A_D equ 0x08 - 38: - 000B CS_SIO_B_C equ 0x0B - 39: - 000A CS_SIO_B_D equ 0x0A - 40: - 0324 DHEX_TO_BYTE equ 0x324 - 41: - 0340 DHEX_TO_BYTE_FAILED equ 0x340 - 42: - 0EC4 EXEC_RST_08 equ 0xEC4 - 43: - 0EC8 EXEC_RST_10 equ 0xEC8 - 44: - 0ED4 EXEC_RST_18 equ 0xED4 - 45: - 0344 HEX_TO_BIN equ 0x344 - 46: - 0352 HEX_TO_BIN_2 equ 0x352 - 47: - 0359 HEX_TO_INVALID_2 equ 0x359 - 48: - 00EC IDE_CMD_IDENT equ 0xEC - 49: - 0020 IDE_CMD_READSEC equ 0x20 - 50: - 0040 IDE_RD equ 0x40 - 51: - 0016 IDE_REG_ALTSTS equ 0x16 - 52: - 000F IDE_REG_CMDSTS equ 0x0F - 53: - 0008 IDE_REG_DATA equ 0x08 - 54: - 0017 IDE_REG_DRVADDR equ 0x17 - 55: - 0009 IDE_REG_ERROR equ 0x09 - 56: - 000D IDE_REG_HCYL equ 0x0D - 57: - 000E IDE_REG_HEAD equ 0x0E - 58: - 000C IDE_REG_LCYL equ 0x0C - 59: - 000A IDE_REG_SECTOR equ 0x0A - 60: - 000B IDE_REG_SSECTOR equ 0x0B - 61: - 0080 IDE_RST equ 0x80 - 62: - 0020 IDE_WR equ 0x20 - 63: - 001B INT_VEC equ 0x1B - 64: - 0040 IO_AY0_ADDR equ 0x40 - 65: - 0041 IO_AY0_DATA equ 0x41 - 66: - 0042 IO_AY1_ADDR equ 0x42 - 67: - 0043 IO_AY1_DATA equ 0x43 - 68: - 0020 IO_REG0 equ 0x20 - 69: - 0025 IO_RTC_AMPM equ 0x25 - 70: - 002D IO_RTC_CTR_D equ 0x2D - 71: - 002E IO_RTC_CTR_E equ 0x2E - 72: - 002F IO_RTC_CTR_F equ 0x2F - 73: - 0026 IO_RTC_DAY0 equ 0x26 - 74: - 0027 IO_RTC_DAY1 equ 0x27 - 75: - 0024 IO_RTC_HOUR equ 0x24 - 76: - 0022 IO_RTC_MIN0 equ 0x22 - 77: - 0023 IO_RTC_MIN1 equ 0x23 - 78: - 0028 IO_RTC_MON0 equ 0x28 - 79: - 0029 IO_RTC_MON1 equ 0x29 - 80: - 0020 IO_RTC_SEC0 equ 0x20 - 81: - 0021 IO_RTC_SEC1 equ 0x21 - 82: - 002C IO_RTC_WEEK equ 0x2C - 83: - 002B IO_RTC_YEAR1 equ 0x2B - 84: - 002A IO_RTC_YERR0 equ 0x2A - 85: - 027E Includes equ 0x27E - 86: - 5000 MEM_IDE_BASE equ 0x5000 - 87: - 5041 MEM_IDE_BUFFER equ 0x5041 - 88: - 5000 MEM_IDE_DEVICE equ 0x5000 - 89: - 5002 MEM_IDE_PARTITION equ 0x5002 - 90: - 5006 MEM_IDE_POINTER equ 0x5006 - 91: - 5001 MEM_IDE_STATUS equ 0x5001 - 92: - 40FE MEM_INT_VEC_T equ 0x40FE - 93: - 4400 MEM_LOC_LOAD equ 0x4400 - 94: - 40FB MEM_VAR_BLOCK equ 0x40FB - 95: - 40FC MEM_VAR_TIMEA equ 0x40FC - 96: - 40FE MEM_VAR_TIMER equ 0x40FE - 97: - 030A MSG_CLEAR equ 0x30A - 98: - 1048 MSG_ERROR equ 0x1048 - 99: - 1061 MSG_START equ 0x1061 - 100: - 4110 PRG_RAM_START equ 0x4110 - 101: - FF00 PRG_RAM_TOP equ 0xFF00 - 102: - 4000 PROG_MEM_START equ 0x4000 - 103: - 0100 PROG_ROM_START equ 0x100 - 104: - 0099 PROMPT_BEGIN equ 0x99 - 105: - 00D6 PROMPT_BEGIN_READ_BACKSPACE equ 0xD6 - 106: - 00A5 PROMPT_BEGIN_READ_LOOP equ 0xA5 - 107: - 00FC PROMPT_BEGIN_READ_PROCESS equ 0xFC - 108: - 0000 RST_00 equ 0x00 - 109: - 0008 RST_08 equ 0x08 - 110: - 0010 RST_10 equ 0x10 - 111: - 0018 RST_18 equ 0x18 - 112: - FFFF STACK_RAM_TOP equ 0xFFFF - 113: - 0000 START_ROM equ 0x00 - 114: - 035B STRCONV_BYTES_TO_HEX equ 0x35B - 115: - 036A STRCONV_BYTES_TO_HEX_1 equ 0x36A - 116: - 0374 STRCONV_BYTES_TO_HEX_2 equ 0x374 - 117: - 1360 STR_Banner_Start equ 0x1360 - 118: - 1390 STR_HEXDUMP_HEADER equ 0x1390 - 119: - 1319 STR_PD_HEADER equ 0x1319 - 120: - 1386 STR_SyntaxError equ 0x1386 - 121: - 138B STR_Unknown equ 0x138B - 122: - 0006 SYM_ACK equ 0x06 - 123: - 0043 SYM_C equ 0x43 - 124: - 0018 SYM_CAN equ 0x18 - 125: - 0004 SYM_EOT equ 0x04 - 126: - 0017 SYM_ETB equ 0x17 - 127: - 0015 SYM_NAK equ 0x15 - 128: - 0001 SYM_SOH equ 0x01 - 129: - 4010 SYS_BUF_START equ 0x4010 - 130: - 4000 SYS_RAM_START equ 0x4000 - 131: - 0018 VAR_CONSOLE_BAUD equ 0x18 - 132: - 000F VAR_CONSOLE_CONF equ 0x0F - 133: - 0080 VDP_MEM equ 0x80 - 134: - 0081 VDP_REG equ 0x81 - 135: - 0ED7 beep equ 0xED7 - 136: - 0EDA beep_loop equ 0xEDA - 137: - 0EF7 beep_pause equ 0xEF7 - 138: - 0ADC dasm_00 equ 0xADC - 139: - 0DC8 dasm_01 equ 0xDC8 - 140: - 0B62 dasm_02 equ 0xB62 - 141: - 0D9A dasm_03 equ 0xD9A - 142: - 0BDF dasm_08 equ 0xBDF - 143: - 0D6D dasm_09 equ 0xD6D - 144: - 0B44 dasm_0A equ 0xB44 - 145: - 0DB1 dasm_0B equ 0xDB1 - 146: - 0B24 dasm_10 equ 0xB24 - 147: - 0B6D dasm_12 equ 0xB6D - 148: - 0AE7 dasm_18 equ 0xAE7 - 149: - 0B4E dasm_1A equ 0xB4E - 150: - 0B01 dasm_20 equ 0xB01 - 151: - 0E0E dasm_22 equ 0xE0E - 152: - 0BA7 dasm_27 equ 0xBA7 - 153: - 0AFA dasm_28 equ 0xAFA - 154: - 0DDF dasm_2A equ 0xDDF - 155: - 0BAB dasm_2F equ 0xBAB - 156: - 0AF2 dasm_30 equ 0xAF2 - 157: - 0B78 dasm_32 equ 0xB78 - 158: - 0BB7 dasm_37 equ 0xBB7 - 159: - 0AEB dasm_38 equ 0xAEB - 160: - 0B58 dasm_3A equ 0xB58 - 161: - 0BB3 dasm_3F equ 0xBB3 - 162: - 0BBB dasm_76 equ 0xBBB - 163: - 0C38 dasm_80C6 equ 0xC38 - 164: - 0BD5 dasm_BE equ 0xBD5 - 165: - 0AE0 dasm_C3 equ 0xAE0 - 166: - 0C5E dasm_C88E equ 0xC5E - 167: - 0B30 dasm_C9 equ 0xB30 - 168: - 0B2A dasm_CD equ 0xB2A - 169: - 0BEC dasm_D9 equ 0xBEC - 170: - 0B12 dasm_DD equ 0xB12 - 171: - 0DCF dasm_DD_01 equ 0xDCF - 172: - 0D88 dasm_DD_09 equ 0xD88 - 173: - 0E24 dasm_DD_22 equ 0xE24 - 174: - 0D9F dasm_DD_23 equ 0xD9F - 175: - 0DF6 dasm_DD_2A equ 0xDF6 - 176: - 0DB6 dasm_DD_2B equ 0xDB6 - 177: - 0D38 dasm_DD_34 equ 0xD38 - 178: - 0D55 dasm_DD_35 equ 0xD55 - 179: - 0C40 dasm_DD_86 equ 0xC40 - 180: - 0C66 dasm_DD_8E equ 0xC66 - 181: - 0C89 dasm_DD_96 equ 0xC89 - 182: - 0CA9 dasm_DD_9E equ 0xCA9 - 183: - 0CCA dasm_DD_A6 equ 0xCCA - 184: - 0D01 dasm_DD_AE equ 0xD01 - 185: - 0CE6 dasm_DD_B6 equ 0xCE6 - 186: - 0D1D dasm_DD_BE equ 0xD1D - 187: - 0E76 dasm_DD_E1 equ 0xE76 - 188: - 0BFC dasm_DD_E3 equ 0xBFC - 189: - 0E60 dasm_DD_E5 equ 0xE60 - 190: - 0E46 dasm_DD_F9 equ 0xE46 - 191: - 0E70 dasm_E1 equ 0xE70 - 192: - 0BF0 dasm_E3 equ 0xBF0 - 193: - 0E5A dasm_E5 equ 0xE5A - 194: - 0B09 dasm_E9 equ 0xB09 - 195: - 0D7F dasm_ED_42 equ 0xD7F - 196: - 0E1A dasm_ED_43 equ 0xE1A - 197: - 0BAF dasm_ED_44 equ 0xBAF - 198: - 0B3A dasm_ED_45 equ 0xB3A - 199: - 0BC6 dasm_ED_46 equ 0xBC6 - 200: - 0D76 dasm_ED_4A equ 0xD76 - 201: - 0DEB dasm_ED_4B equ 0xDEB - 202: - 0B35 dasm_ED_4D equ 0xB35 - 203: - 0BCB dasm_ED_56 equ 0xBCB - 204: - 0BD0 dasm_ED_5E equ 0xBD0 - 205: - 0C14 dasm_ED_A0 equ 0xC14 - 206: - 0C26 dasm_ED_A1 equ 0xC26 - 207: - 0C1D dasm_ED_A8 equ 0xC1D - 208: - 0C2F dasm_ED_A9 equ 0xC2F - 209: - 0C18 dasm_ED_B0 equ 0xC18 - 210: - 0C2A dasm_ED_B1 equ 0xC2A - 211: - 0C21 dasm_ED_B8 equ 0xC21 - 212: - 0C33 dasm_ED_B9 equ 0xC33 - 213: - 0BC0 dasm_F3 equ 0xBC0 - 214: - 0E3C dasm_F9 equ 0xE3C - 215: - 0BC3 dasm_FB equ 0xBC3 - 216: - 0B1B dasm_FD equ 0xB1B - 217: - 0DD7 dasm_FD_01 equ 0xDD7 - 218: - 0D91 dasm_FD_09 equ 0xD91 - 219: - 0E30 dasm_FD_22 equ 0xE30 - 220: - 0DA8 dasm_FD_23 equ 0xDA8 - 221: - 0E02 dasm_FD_2A equ 0xE02 - 222: - 0DBF dasm_FD_2B equ 0xDBF - 223: - 0D44 dasm_FD_34 equ 0xD44 - 224: - 0D61 dasm_FD_35 equ 0xD61 - 225: - 0C4F dasm_FD_86 equ 0xC4F - 226: - 0C75 dasm_FD_8E equ 0xC75 - 227: - 0C95 dasm_FD_96 equ 0xC95 - 228: - 0CB7 dasm_FD_9E equ 0xCB7 - 229: - 0CD6 dasm_FD_A6 equ 0xCD6 - 230: - 0D0D dasm_FD_AE equ 0xD0D - 231: - 0CF1 dasm_FD_B6 equ 0xCF1 - 232: - 0D28 dasm_FD_BE equ 0xD28 - 233: - 0E7E dasm_FD_E1 equ 0xE7E - 234: - 0C08 dasm_FD_E3 equ 0xC08 - 235: - 0E68 dasm_FD_E5 equ 0xE68 - 236: - 0E50 dasm_FD_F9 equ 0xE50 - 237: - 0B3F dasm_FF equ 0xB3F - 238: - 0E86 dasm_UU equ 0xE86 - 239: - 0E8A dasm_UW equ 0xE8A - 240: - 0CC5 dasm__AND equ 0xCC5 - 241: - 0D19 dasm__CP equ 0xD19 - 242: - 0D50 dasm__DEC equ 0xD50 - 243: - 0B97 dasm__ED_47 equ 0xB97 - 244: - 0B9F dasm__ED_4F equ 0xB9F - 245: - 0B87 dasm__ED_57 equ 0xB87 - 246: - 0B8F dasm__ED_5F equ 0xB8F - 247: - 0D33 dasm__INC equ 0xD33 - 248: - 0B83 dasm__LD equ 0xB83 - 249: - 0CE2 dasm__OR equ 0xCE2 - 250: - 0CA1 dasm__SBC equ 0xCA1 - 251: - 0C84 dasm__SUB equ 0xC84 - 252: - 0CFC dasm__XOR equ 0xCFC - 253: - 0684 dasm_opcode_table equ 0x684 - 254: - 04B1 dasm_print16hex_addr equ 0x4B1 - 255: - 04C9 dasm_print8hex equ 0x4C9 - 256: - 0E8F dasm_printFlags_table equ 0xE8F - 257: - 0E9F dasm_printRegister8_table equ 0xE9F - 258: - 0EBF dasm_printRegister8_table_HL equ 0xEBF - 259: - 0EA7 dasm_printRegisterIX_table equ 0xEA7 - 260: - 0EAF dasm_printRegisterIY_table equ 0xEAF - 261: - 0EB7 dasm_printRegisterSP_table equ 0xEB7 - 262: - 0375 disassemble equ 0x375 - 263: - 045B disassemble_continue equ 0x45B - 264: - 044B disassemble_err equ 0x44B - 265: - 0379 disassemble_next equ 0x379 - 266: - 0448 disassemble_print_opcode_params_end equ 0x448 - 267: - 03F4 disassemble_print_opcode_params_loop equ 0x3F4 - 268: - 03B6 disassemble_print_opcode_raw equ 0x3B6 - 269: - 03CA disassemble_print_opcode_raw_fill equ 0x3CA - 270: - 048D disassemble_table_first_match equ 0x48D - 271: - 04A7 disassemble_table_found equ 0x4A7 - 272: - 04AB disassemble_table_notfound equ 0x4AB - 273: - 0469 disassemble_table_seek equ 0x469 - 274: - 046D disassemble_table_seek_loop equ 0x46D - 275: - 12BE dump_pretty equ 0x12BE - 276: - 12E8 dump_pretty_ascii equ 0x12E8 - 277: - 1306 dump_pretty_ascii_cont equ 0x1306 - 278: - 12F0 dump_pretty_ascii_loop equ 0x12F0 - 279: - 1301 dump_pretty_ascii_none equ 0x1301 - 280: - 12DB dump_pretty_col equ 0x12DB - 281: - 1318 dump_pretty_end equ 0x1318 - 282: - 130C dump_pretty_nextrow equ 0x130C - 283: - 12C6 dump_pretty_row equ 0x12C6 - 284: - 116E ide_printerror equ 0x116E - 285: - 10ED ide_readsector_256 equ 0x10ED - 286: - 111C ide_readsector_256_done equ 0x111C - 287: - 10EF ide_readsector_256_waitloop equ 0x10EF - 288: - 111D ide_readsector_512_inv equ 0x111D - 289: - 1122 ide_readsector_512_inv_waitloop equ 0x1122 - 290: - 1158 ide_readsector_timeout equ 0x1158 - 291: - 10CF ide_regread_8 equ 0x10CF - 292: - 10B3 ide_regwrite_8 equ 0x10B3 - 293: - 10A6 ide_reset equ 0x10A6 - 294: - 116D ide_writesector_256 equ 0x116D - 295: - 11F4 ideif_init_drive equ 0x11F4 - 296: - 1222 ideif_init_drive_detected equ 0x1222 - 297: - 1208 ideif_init_drive_loop1 equ 0x1208 - 298: - 121B ideif_init_drive_nodrv equ 0x121B - 299: - 007B mon_start_complete equ 0x7B - 300: - 0050 mon_start_init_ctc equ 0x50 - 301: - 0064 mon_start_init_serial equ 0x64 - 302: - 0050 mon_start_init_sound equ 0x50 - 303: - 0067 mon_start_ram equ 0x67 - 304: - 0070 mon_start_ram_loop equ 0x70 - 305: - 0044 mon_var_template equ 0x44 - 306: - 006E mon_var_template_end equ 0x6E - 307: - 04D7 param_01 equ 0x4D7 - 308: - 04FE param_02 equ 0x4FE - 309: - 051B param_03 equ 0x51B - 310: - 0553 param_03_done equ 0x553 - 311: - 053C param_03_neg equ 0x53C - 312: - 0557 param_04 equ 0x557 - 313: - 0567 param_04_i equ 0x567 - 314: - 056D param_05 equ 0x56D - 315: - 057A param_06 equ 0x57A - 316: - 0594 param_07 equ 0x594 - 317: - 05A1 param_08 equ 0x5A1 - 318: - 05B6 param_09 equ 0x5B6 - 319: - 05BC param_09_0A equ 0x5BC - 320: - 05AD param_0A equ 0x5AD - 321: - 05CB param_10 equ 0x5CB - 322: - 05DB param_11 equ 0x5DB - 323: - 05EA param_11_12 equ 0x5EA - 324: - 060A param_11_12_all equ 0x60A - 325: - 05FD param_11_12_def equ 0x5FD - 326: - 0602 param_11_12_ix equ 0x602 - 327: - 0607 param_11_12_iy equ 0x607 - 328: - 05E3 param_12 equ 0x5E3 - 329: - 061B param_13 equ 0x61B - 330: - 063A param_80 equ 0x63A - 331: - 0641 param_80_seek equ 0x641 - 332: - 0631 param_81 equ 0x631 - 333: - 0675 param_comma equ 0x675 - 334: - 0650 param_printRegister equ 0x650 - 335: - 066E param_printRegisterA equ 0x66E - 336: - 0666 param_printRegisterHL equ 0x666 - 337: - 02E7 print_a_hex equ 0x2E7 - 338: - 02B7 print_char equ 0x2B7 - 339: - 02CA print_clear equ 0x2CA - 340: - 02D1 print_newLine equ 0x2D1 - 341: - 02BF print_str equ 0x2BF - 342: - 02C9 print_str_end equ 0x2C9 - 343: - 1358 print_str_fixed equ 0x1358 - 344: - 02DC print_wait_out equ 0x2DC - 345: - 02F8 read_char equ 0x2F8 - 346: - 1256 read_lba_sector equ 0x1256 - 347: - 12B3 str_dev_notfound equ 0x12B3 - 348: - 129D str_dev_ready equ 0x129D - 349: - 12AA str_dev_ready2 equ 0x12AA - 350: - 1289 str_dev_waitready equ 0x1289 - 351: - 11A1 str_error_start equ 0x11A1 - 352: - 11BE str_error_start1 equ 0x11BE - 353: - 11C7 str_error_start2 equ 0x11C7 - 354: - 11D0 str_error_time equ 0x11D0 - 355: - 4029 var_buffer equ 0x4029 - 356: - 4000 var_buffer_len equ 0x4000 - 357: - 411A var_bytes_count equ 0x411A - 358: - 4006 var_curserchar equ 0x4006 - 359: - 4007 var_curserlastaddr equ 0x4007 - 360: - 4005 var_curseron equ 0x4005 - 361: - 4004 var_curserstate equ 0x4004 - 362: - 4002 var_curserx equ 0x4002 - 363: - 4003 var_cursery equ 0x4003 - 364: - 4001 var_last_char equ 0x4001 - 365: - 4114 var_opcode equ 0x4114 - 366: - 4116 var_opcode_length equ 0x4116 - 367: - 4119 var_opcode_pcount equ 0x4119 - 368: - 4110 var_opcode_start equ 0x4110 - 369: - 4117 var_opcode_string equ 0x4117 - 370: - 4112 var_opcode_table equ 0x4112 - 371: - 4115 var_opcode_x equ 0x4115 - 372: - 4019 var_ps2mem equ 0x4019 - 373: - 4009 var_scratch equ 0x4009 - 374: - 107B xmodem_ack equ 0x107B - 375: - 0F34 xmodem_await_conn equ 0xF34 - 376: - 0FDF xmodem_end equ 0xFDF - 377: - 0FA5 xmodem_err equ 0xFA5 - 378: - 0F06 xmodem_init equ 0xF06 - 379: - 0FE6 xmodem_int equ 0xFE6 - 380: - 1005 xmodem_int_cont equ 0x1005 - 381: - 1089 xmodem_nak equ 0x1089 - 382: - 1037 xmodem_out equ 0x1037 - 383: - 0F3F xmodem_packet equ 0xF3F - 384: - 0F9D xmodem_packet_EOT equ 0xF9D - 385: - 0F51 xmodem_packet_get equ 0xF51 - 386: - 0F8A xmodem_packet_get_crc equ 0xF8A - 387: - 0F7B xmodem_packet_get_data equ 0xF7B - 388: - 0003 xmodem_read_timeount equ 0x03 - 389: - 100A xmodem_read_wait equ 0x100A - 390: - 1018 xmodem_read_wait_loop equ 0x1018 - 391: - 1035 xmodem_read_wait_timeout equ 0x1035 - 392: - 1097 xmodem_wait equ 0x1097 - 393: - 109D xmodem_wait_1 equ 0x109D - 394: - 103D xmodem_wait_out equ 0x103D + 4: - 00D0 ADDR_RTC equ 0xD0 + 5: - 014F A_RTS_OFF equ 0x14F + 6: - 0158 A_RTS_ON equ 0x158 + 7: - 0050 BOOT_PHASE0 equ 0x50 + 8: - 006E BOOT_PHASE1 equ 0x6E + 9: - 0077 BOOT_PHASE1_LOOP equ 0x77 + 10: - 0082 BOOT_PHASE2 equ 0x82 + 11: - 11CD COMMAND equ 0x11CD + 12: - 1208 COMMAND_BACKSPACE equ 0x1208 + 13: - 1166 COMMAND_LUT equ 0x1166 + 14: - 122E COMMAND_PROCESS equ 0x122E + 15: - 1269 COMMAND_PROCESS_FOUND equ 0x1269 + 16: - 1231 COMMAND_PROCESS_LOOP equ 0x1231 + 17: - 123A COMMAND_PROCESS_LOOP_STR1 equ 0x123A + 18: - 1250 COMMAND_PROCESS_LOOP_STR2 equ 0x1250 + 19: - 1255 COMMAND_PROCESS_NEXT_ENTRY equ 0x1255 + 20: - 1254 COMMAND_PROCESS_NEXT_ENTRYI equ 0x1254 + 21: - 1260 COMMAND_PROCESS_NOT_FOUND equ 0x1260 + 22: - 11D9 COMMAND_READ equ 0x11D9 + 23: - 009B CONSOLE_INIT equ 0x9B + 24: - 009B CONSOLE_INIT_CTC equ 0x9B + 25: - 00A3 CONSOLE_INIT_SIO equ 0xA3 + 26: - 00F9 CS_APU_CTRL equ 0xF9 + 27: - 00F8 CS_APU_DATA equ 0xF8 + 28: - 0000 CS_BANK equ 0x00 + 29: - 0004 CS_CTC_0 equ 0x04 + 30: - 0005 CS_CTC_1 equ 0x05 + 31: - 0006 CS_CTC_2 equ 0x06 + 32: - 0007 CS_CTC_3 equ 0x07 + 33: - 0001 CS_DIP equ 0x01 + 34: - 0033 CS_PIA_CR equ 0x33 + 35: - 0030 CS_PIA_PA equ 0x30 + 36: - 0031 CS_PIA_PB equ 0x31 + 37: - 0032 CS_PIA_PC equ 0x32 + 38: - 00F6 CS_PIO_AC equ 0xF6 + 39: - 00F4 CS_PIO_AD equ 0xF4 + 40: - 00F7 CS_PIO_BC equ 0xF7 + 41: - 00F5 CS_PIO_BD equ 0xF5 + 42: - 0009 CS_SIO_A_C equ 0x09 + 43: - 0008 CS_SIO_A_D equ 0x08 + 44: - 000B CS_SIO_B_C equ 0x0B + 45: - 000A CS_SIO_B_D equ 0x0A + 46: - 0161 DHEX_TO_BYTE equ 0x161 + 47: - 017D DHEX_TO_BYTE_FAILED equ 0x17D + 48: - 127F ERR_SYNTAX equ 0x127F + 49: - 0D01 EXEC_RST_08 equ 0xD01 + 50: - 0D05 EXEC_RST_10 equ 0xD05 + 51: - 0D11 EXEC_RST_18 equ 0xD11 + 52: - 0181 HEX_TO_BIN equ 0x181 + 53: - 018F HEX_TO_BIN_2 equ 0x18F + 54: - 0196 HEX_TO_INVALID_2 equ 0x196 + 55: - 00EC IDE_CMD_IDENT equ 0xEC + 56: - 0020 IDE_CMD_READSEC equ 0x20 + 57: - 0E91 IDE_DEF_TABLE equ 0xE91 + 58: - 0040 IDE_RD equ 0x40 + 59: - 0016 IDE_REG_ALTSTS equ 0x16 + 60: - 000F IDE_REG_CMDSTS equ 0x0F + 61: - 0008 IDE_REG_DATA equ 0x08 + 62: - 0017 IDE_REG_DRVADDR equ 0x17 + 63: - 0009 IDE_REG_ERROR equ 0x09 + 64: - 000D IDE_REG_HCYL equ 0x0D + 65: - 000E IDE_REG_HEAD equ 0x0E + 66: - 000C IDE_REG_LCYL equ 0x0C + 67: - 000A IDE_REG_SECTOR equ 0x0A + 68: - 000B IDE_REG_SSECTOR equ 0x0B + 69: - 0080 IDE_RST equ 0x80 + 70: - 0020 IDE_WR equ 0x20 + 71: - 0001 IIC_CLK equ 0x01 + 72: - 0042 IIC_DATA equ 0x42 + 73: - 001B INT_VEC equ 0x1B + 74: - 402B IN_BUFFER equ 0x402B + 75: - 0040 IO_AY0_ADDR equ 0x40 + 76: - 0041 IO_AY0_DATA equ 0x41 + 77: - 0042 IO_AY1_ADDR equ 0x42 + 78: - 0043 IO_AY1_DATA equ 0x43 + 79: - 0020 IO_REG0 equ 0x20 + 80: - 0025 IO_RTC_AMPM equ 0x25 + 81: - 002D IO_RTC_CTR_D equ 0x2D + 82: - 002E IO_RTC_CTR_E equ 0x2E + 83: - 002F IO_RTC_CTR_F equ 0x2F + 84: - 0026 IO_RTC_DAY0 equ 0x26 + 85: - 0027 IO_RTC_DAY1 equ 0x27 + 86: - 0024 IO_RTC_HOUR equ 0x24 + 87: - 0022 IO_RTC_MIN0 equ 0x22 + 88: - 0023 IO_RTC_MIN1 equ 0x23 + 89: - 0028 IO_RTC_MON0 equ 0x28 + 90: - 0029 IO_RTC_MON1 equ 0x29 + 91: - 0020 IO_RTC_SEC0 equ 0x20 + 92: - 0021 IO_RTC_SEC1 equ 0x21 + 93: - 002C IO_RTC_WEEK equ 0x2C + 94: - 002B IO_RTC_YEAR1 equ 0x2B + 95: - 002A IO_RTC_YERR0 equ 0x2A + 96: - 5000 MEM_IDE_BASE equ 0x5000 + 97: - 5062 MEM_IDE_BUFFER equ 0x5062 + 98: - 5000 MEM_IDE_DEVICE equ 0x5000 + 99: - 5041 MEM_IDE_DEV_TABLE equ 0x5041 + 100: - 5002 MEM_IDE_PARTITION equ 0x5002 + 101: - 5006 MEM_IDE_POINTER equ 0x5006 + 102: - 5061 MEM_IDE_SELECTED equ 0x5061 + 103: - 5001 MEM_IDE_STATUS equ 0x5001 + 104: - 0147 MSG_CLEAR equ 0x147 + 105: - 1278 NOT_IMPLEMENTED equ 0x1278 + 106: - 12DA OP_CALL equ 0x12DA + 107: - 146E OP_CLR equ 0x146E + 108: - 135B OP_DASM equ 0x135B + 109: - 12FA OP_DUMP equ 0x12FA + 110: - 12C1 OP_EXEC equ 0x12C1 + 111: - 1422 OP_IIC_IN equ 0x1422 + 112: - 13C2 OP_IIC_OUT equ 0x13C2 + 113: - 138B OP_IO_IN equ 0x138B + 114: - 13A1 OP_IO_OUT equ 0x13A1 + 115: - 1472 OP_RTIME equ 0x1472 + 116: - 132A OP_SET equ 0x132A + 117: - 160A OP_STIME equ 0x160A + 118: - 16B8 POST_CHECK_APU equ 0x16B8 + 119: - 16E3 POST_CHECK_IDE_30 equ 0x16E3 + 120: - 16F7 POST_CHECK_IDE_40 equ 0x16F7 + 121: - 1693 POST_CHECK_PIO equ 0x1693 + 122: - 1683 POST_START equ 0x1683 + 123: - 1712 POST_TEST_RTC equ 0x1712 + 124: - 4110 PRG_RAM_START equ 0x4110 + 125: - FF00 PRG_RAM_TOP equ 0xFF00 + 126: - 4000 PROG_MEM_START equ 0x4000 + 127: - 0100 PROG_ROM_START equ 0x100 + 128: - 0000 RST_00 equ 0x00 + 129: - 0008 RST_08 equ 0x08 + 130: - 0010 RST_10 equ 0x10 + 131: - 0018 RST_18 equ 0x18 + 132: - FFFF STACK_RAM_TOP equ 0xFFFF + 133: - 0000 START_ROM equ 0x00 + 134: - 0198 STRCONV_BYTES_TO_HEX equ 0x198 + 135: - 01A7 STRCONV_BYTES_TO_HEX_1 equ 0x1A7 + 136: - 01B1 STRCONV_BYTES_TO_HEX_2 equ 0x1B1 + 137: - 1817 STR_Banner_Start equ 0x1817 + 138: - 111F STR_PD_HEADER equ 0x111F + 139: - 4010 SYS_BUF_START equ 0x4010 + 140: - 4000 SYS_RAM_START equ 0x4000 + 141: - 0018 VAR_CONSOLE_BAUD equ 0x18 + 142: - 000F VAR_CONSOLE_CONF equ 0x0F + 143: - 0080 VDP_MEM equ 0x80 + 144: - 0081 VDP_REG equ 0x81 + 145: - 1277 _COMMAND_PROCESS_FOUND equ 0x1277 + 146: - 12F9 _OP_CALL equ 0x12F9 + 147: - 1407 _OP_IIC_ACK_ERR equ 0x1407 + 148: - 140E _OP_IIC_ACK_ERR_str equ 0x140E + 149: - 1454 _OP_IIC_IN_LOOP equ 0x1454 + 150: - 1461 _OP_IIC_IN_LOOP_TEXT equ 0x1461 + 151: - 13D8 _OP_IIC_OUT_LOOP equ 0x13D8 + 152: - 13F4 _OP_IIC_OUT_SEND equ 0x13F4 + 153: - 1475 _OP_RTIME_NN equ 0x1475 + 154: - 152D _OP_RTIME_RD_CMD equ 0x152D + 155: - 1342 _OP_SET_LOOP equ 0x1342 + 156: - 15D0 _OP_STIME_INVALID equ 0x15D0 + 157: - 15E7 _OP_STIME_PROMPT equ 0x15E7 + 158: - 15FF _OP_STIME_PROMPT_ERR equ 0x15FF + 159: - 152E _OP_STIME_STR_DAY equ 0x152E + 160: - 157F _OP_STIME_STR_HOUR equ 0x157F + 161: - 159A _OP_STIME_STR_MIN equ 0x159A + 162: - 1549 _OP_STIME_STR_MON equ 0x1549 + 163: - 15B5 _OP_STIME_STR_SEC equ 0x15B5 + 164: - 1564 _OP_STIME_STR_YEAR equ 0x1564 + 165: - 16D7 _POST_CHECK_APU_FAILED equ 0x16D7 + 166: - 170B _POST_CHECK_IDE_FAILED equ 0x170B + 167: - 16AC _POST_CHECK_PIO_FAILED equ 0x16AC + 168: - 174C _POST_TEST_RTC_INVALID equ 0x174C + 169: - 1745 _POST_TEST_RTC_NOTFOUND equ 0x1745 + 170: - 129A _STR_NOT_FOUND equ 0x129A + 171: - 1286 _STR_NOT_IMPLEMENTED equ 0x1286 + 172: - 12AE _STR_SYNTAX equ 0x12AE + 173: - 0144 _read_bcd_invalid equ 0x144 + 174: - 167E _shift4 equ 0x167E + 175: - 0D14 beep equ 0xD14 + 176: - 0D17 beep_loop equ 0xD17 + 177: - 0D34 beep_pause equ 0xD34 + 178: - 0919 dasm_00 equ 0x919 + 179: - 0C05 dasm_01 equ 0xC05 + 180: - 099F dasm_02 equ 0x99F + 181: - 0BD7 dasm_03 equ 0xBD7 + 182: - 0A1C dasm_08 equ 0xA1C + 183: - 0BAA dasm_09 equ 0xBAA + 184: - 0981 dasm_0A equ 0x981 + 185: - 0BEE dasm_0B equ 0xBEE + 186: - 0961 dasm_10 equ 0x961 + 187: - 09AA dasm_12 equ 0x9AA + 188: - 0924 dasm_18 equ 0x924 + 189: - 098B dasm_1A equ 0x98B + 190: - 093E dasm_20 equ 0x93E + 191: - 0C4B dasm_22 equ 0xC4B + 192: - 09E4 dasm_27 equ 0x9E4 + 193: - 0937 dasm_28 equ 0x937 + 194: - 0C1C dasm_2A equ 0xC1C + 195: - 09E8 dasm_2F equ 0x9E8 + 196: - 092F dasm_30 equ 0x92F + 197: - 09B5 dasm_32 equ 0x9B5 + 198: - 09F4 dasm_37 equ 0x9F4 + 199: - 0928 dasm_38 equ 0x928 + 200: - 0995 dasm_3A equ 0x995 + 201: - 09F0 dasm_3F equ 0x9F0 + 202: - 09F8 dasm_76 equ 0x9F8 + 203: - 0A75 dasm_80C6 equ 0xA75 + 204: - 0A12 dasm_BE equ 0xA12 + 205: - 091D dasm_C3 equ 0x91D + 206: - 0A9B dasm_C88E equ 0xA9B + 207: - 096D dasm_C9 equ 0x96D + 208: - 0967 dasm_CD equ 0x967 + 209: - 0A29 dasm_D9 equ 0xA29 + 210: - 094F dasm_DD equ 0x94F + 211: - 0C0C dasm_DD_01 equ 0xC0C + 212: - 0BC5 dasm_DD_09 equ 0xBC5 + 213: - 0C61 dasm_DD_22 equ 0xC61 + 214: - 0BDC dasm_DD_23 equ 0xBDC + 215: - 0C33 dasm_DD_2A equ 0xC33 + 216: - 0BF3 dasm_DD_2B equ 0xBF3 + 217: - 0B75 dasm_DD_34 equ 0xB75 + 218: - 0B92 dasm_DD_35 equ 0xB92 + 219: - 0A7D dasm_DD_86 equ 0xA7D + 220: - 0AA3 dasm_DD_8E equ 0xAA3 + 221: - 0AC6 dasm_DD_96 equ 0xAC6 + 222: - 0AE6 dasm_DD_9E equ 0xAE6 + 223: - 0B07 dasm_DD_A6 equ 0xB07 + 224: - 0B3E dasm_DD_AE equ 0xB3E + 225: - 0B23 dasm_DD_B6 equ 0xB23 + 226: - 0B5A dasm_DD_BE equ 0xB5A + 227: - 0CB3 dasm_DD_E1 equ 0xCB3 + 228: - 0A39 dasm_DD_E3 equ 0xA39 + 229: - 0C9D dasm_DD_E5 equ 0xC9D + 230: - 0C83 dasm_DD_F9 equ 0xC83 + 231: - 0CAD dasm_E1 equ 0xCAD + 232: - 0A2D dasm_E3 equ 0xA2D + 233: - 0C97 dasm_E5 equ 0xC97 + 234: - 0946 dasm_E9 equ 0x946 + 235: - 0BBC dasm_ED_42 equ 0xBBC + 236: - 0C57 dasm_ED_43 equ 0xC57 + 237: - 09EC dasm_ED_44 equ 0x9EC + 238: - 0977 dasm_ED_45 equ 0x977 + 239: - 0A03 dasm_ED_46 equ 0xA03 + 240: - 0BB3 dasm_ED_4A equ 0xBB3 + 241: - 0C28 dasm_ED_4B equ 0xC28 + 242: - 0972 dasm_ED_4D equ 0x972 + 243: - 0A08 dasm_ED_56 equ 0xA08 + 244: - 0A0D dasm_ED_5E equ 0xA0D + 245: - 0A51 dasm_ED_A0 equ 0xA51 + 246: - 0A63 dasm_ED_A1 equ 0xA63 + 247: - 0A5A dasm_ED_A8 equ 0xA5A + 248: - 0A6C dasm_ED_A9 equ 0xA6C + 249: - 0A55 dasm_ED_B0 equ 0xA55 + 250: - 0A67 dasm_ED_B1 equ 0xA67 + 251: - 0A5E dasm_ED_B8 equ 0xA5E + 252: - 0A70 dasm_ED_B9 equ 0xA70 + 253: - 09FD dasm_F3 equ 0x9FD + 254: - 0C79 dasm_F9 equ 0xC79 + 255: - 0A00 dasm_FB equ 0xA00 + 256: - 0958 dasm_FD equ 0x958 + 257: - 0C14 dasm_FD_01 equ 0xC14 + 258: - 0BCE dasm_FD_09 equ 0xBCE + 259: - 0C6D dasm_FD_22 equ 0xC6D + 260: - 0BE5 dasm_FD_23 equ 0xBE5 + 261: - 0C3F dasm_FD_2A equ 0xC3F + 262: - 0BFC dasm_FD_2B equ 0xBFC + 263: - 0B81 dasm_FD_34 equ 0xB81 + 264: - 0B9E dasm_FD_35 equ 0xB9E + 265: - 0A8C dasm_FD_86 equ 0xA8C + 266: - 0AB2 dasm_FD_8E equ 0xAB2 + 267: - 0AD2 dasm_FD_96 equ 0xAD2 + 268: - 0AF4 dasm_FD_9E equ 0xAF4 + 269: - 0B13 dasm_FD_A6 equ 0xB13 + 270: - 0B4A dasm_FD_AE equ 0xB4A + 271: - 0B2E dasm_FD_B6 equ 0xB2E + 272: - 0B65 dasm_FD_BE equ 0xB65 + 273: - 0CBB dasm_FD_E1 equ 0xCBB + 274: - 0A45 dasm_FD_E3 equ 0xA45 + 275: - 0CA5 dasm_FD_E5 equ 0xCA5 + 276: - 0C8D dasm_FD_F9 equ 0xC8D + 277: - 097C dasm_FF equ 0x97C + 278: - 0CC3 dasm_UU equ 0xCC3 + 279: - 0CC7 dasm_UW equ 0xCC7 + 280: - 0B02 dasm__AND equ 0xB02 + 281: - 0B56 dasm__CP equ 0xB56 + 282: - 0B8D dasm__DEC equ 0xB8D + 283: - 09D4 dasm__ED_47 equ 0x9D4 + 284: - 09DC dasm__ED_4F equ 0x9DC + 285: - 09C4 dasm__ED_57 equ 0x9C4 + 286: - 09CC dasm__ED_5F equ 0x9CC + 287: - 0B70 dasm__INC equ 0xB70 + 288: - 09C0 dasm__LD equ 0x9C0 + 289: - 0B1F dasm__OR equ 0xB1F + 290: - 0ADE dasm__SBC equ 0xADE + 291: - 0AC1 dasm__SUB equ 0xAC1 + 292: - 0B39 dasm__XOR equ 0xB39 + 293: - 04C1 dasm_opcode_table equ 0x4C1 + 294: - 02EE dasm_print16hex_addr equ 0x2EE + 295: - 0306 dasm_print8hex equ 0x306 + 296: - 0CCC dasm_printFlags_table equ 0xCCC + 297: - 0CDC dasm_printRegister8_table equ 0xCDC + 298: - 0CFC dasm_printRegister8_table_HL equ 0xCFC + 299: - 0CE4 dasm_printRegisterIX_table equ 0xCE4 + 300: - 0CEC dasm_printRegisterIY_table equ 0xCEC + 301: - 0CF4 dasm_printRegisterSP_table equ 0xCF4 + 302: - 01B2 disassemble equ 0x1B2 + 303: - 0298 disassemble_continue equ 0x298 + 304: - 0288 disassemble_err equ 0x288 + 305: - 01B6 disassemble_next equ 0x1B6 + 306: - 0285 disassemble_print_opcode_params_end equ 0x285 + 307: - 0231 disassemble_print_opcode_params_loop equ 0x231 + 308: - 01F3 disassemble_print_opcode_raw equ 0x1F3 + 309: - 0207 disassemble_print_opcode_raw_fill equ 0x207 + 310: - 02CA disassemble_table_first_match equ 0x2CA + 311: - 02E4 disassemble_table_found equ 0x2E4 + 312: - 02E8 disassemble_table_notfound equ 0x2E8 + 313: - 02A6 disassemble_table_seek equ 0x2A6 + 314: - 02AA disassemble_table_seek_loop equ 0x2AA + 315: - 10C4 dump_pretty equ 0x10C4 + 316: - 10EE dump_pretty_ascii equ 0x10EE + 317: - 110C dump_pretty_ascii_cont equ 0x110C + 318: - 10F6 dump_pretty_ascii_loop equ 0x10F6 + 319: - 1107 dump_pretty_ascii_none equ 0x1107 + 320: - 10E1 dump_pretty_col equ 0x10E1 + 321: - 111E dump_pretty_end equ 0x111E + 322: - 1112 dump_pretty_nextrow equ 0x1112 + 323: - 10CC dump_pretty_row equ 0x10CC + 324: - 0E0B ide_printerror equ 0xE0B + 325: - 0D8A ide_readsector_256 equ 0xD8A + 326: - 0DB9 ide_readsector_256_done equ 0xDB9 + 327: - 0D8C ide_readsector_256_waitloop equ 0xD8C + 328: - 0DBA ide_readsector_512_inv equ 0xDBA + 329: - 0DBF ide_readsector_512_inv_waitloop equ 0xDBF + 330: - 0DF5 ide_readsector_timeout equ 0xDF5 + 331: - 0D6C ide_regread_8 equ 0xD6C + 332: - 0D50 ide_regwrite_8 equ 0xD50 + 333: - 0D43 ide_reset equ 0xD43 + 334: - 0E0A ide_writesector_256 equ 0xE0A + 335: - 0EB1 ideif_init_drive equ 0xEB1 + 336: - 0EDF ideif_init_drive_detected equ 0xEDF + 337: - 0EC5 ideif_init_drive_loop1 equ 0xEC5 + 338: - 0ED8 ideif_init_drive_nodrv equ 0xED8 + 339: - 0EB1 ideif_init_dtable equ 0xEB1 + 340: - 0FD8 iic_init equ 0xFD8 + 341: - 1017 iic_read_ack equ 0x1017 + 342: - 0FA9 iic_receive_buffer equ 0xFA9 + 343: - 0FCC iic_receive_buffer_done equ 0xFCC + 344: - 0FD2 iic_receive_buffer_err equ 0xFD2 + 345: - 0FBA iic_receive_buffer_loop equ 0xFBA + 346: - 109D iic_receive_byte equ 0x109D + 347: - 10AA iic_receive_byte_loop equ 0x10AA + 348: - 103D iic_send_ack equ 0x103D + 349: - 0F7F iic_send_buffer equ 0xF7F + 350: - 0F9D iic_send_buffer_done equ 0xF9D + 351: - 0FA3 iic_send_buffer_err equ 0xFA3 + 352: - 0F8F iic_send_buffer_loop equ 0xF8F + 353: - 1077 iic_send_byte equ 0x1077 + 354: - 1083 iic_send_byte_loop equ 0x1083 + 355: - 0FF6 iic_send_ebit equ 0xFF6 + 356: - 105A iic_send_nack equ 0x105A + 357: - 0FE1 iic_send_sbit equ 0xFE1 + 358: - 0044 mon_var_template equ 0x44 + 359: - 0070 mon_var_template_end equ 0x70 + 360: - 0314 param_01 equ 0x314 + 361: - 033B param_02 equ 0x33B + 362: - 0358 param_03 equ 0x358 + 363: - 0390 param_03_done equ 0x390 + 364: - 0379 param_03_neg equ 0x379 + 365: - 0394 param_04 equ 0x394 + 366: - 03A4 param_04_i equ 0x3A4 + 367: - 03AA param_05 equ 0x3AA + 368: - 03B7 param_06 equ 0x3B7 + 369: - 03D1 param_07 equ 0x3D1 + 370: - 03DE param_08 equ 0x3DE + 371: - 03F3 param_09 equ 0x3F3 + 372: - 03F9 param_09_0A equ 0x3F9 + 373: - 03EA param_0A equ 0x3EA + 374: - 0408 param_10 equ 0x408 + 375: - 0418 param_11 equ 0x418 + 376: - 0427 param_11_12 equ 0x427 + 377: - 0447 param_11_12_all equ 0x447 + 378: - 043A param_11_12_def equ 0x43A + 379: - 043F param_11_12_ix equ 0x43F + 380: - 0444 param_11_12_iy equ 0x444 + 381: - 0420 param_12 equ 0x420 + 382: - 0458 param_13 equ 0x458 + 383: - 0477 param_80 equ 0x477 + 384: - 047E param_80_seek equ 0x47E + 385: - 046E param_81 equ 0x46E + 386: - 04B2 param_comma equ 0x4B2 + 387: - 048D param_printRegister equ 0x48D + 388: - 04AB param_printRegisterA equ 0x4AB + 389: - 04A3 param_printRegisterHL equ 0x4A3 + 390: - 0104 print_a_hex equ 0x104 + 391: - 0116 print_bcd equ 0x116 + 392: - 00D4 print_char equ 0xD4 + 393: - 00E7 print_clear equ 0xE7 + 394: - 00EE print_newLine equ 0xEE + 395: - 00DC print_str equ 0xDC + 396: - 00E6 print_str_end equ 0xE6 + 397: - 115E print_str_fixed equ 0x115E + 398: - 00F9 print_wait_out equ 0xF9 + 399: - 012E read_bcd equ 0x12E + 400: - 011C read_char equ 0x11C + 401: - 0F13 read_lba_sector equ 0xF13 + 402: - 0F74 str_dev_notfound equ 0xF74 + 403: - 0F5E str_dev_ready equ 0xF5E + 404: - 0F6B str_dev_ready2 equ 0xF6B + 405: - 0F46 str_dev_waitready equ 0xF46 + 406: - 0E3E str_error_start equ 0xE3E + 407: - 0E5B str_error_start1 equ 0xE5B + 408: - 0E64 str_error_start2 equ 0xE64 + 409: - 0E6D str_error_time equ 0xE6D + 410: - 17A4 str_post_apu equ 0x17A4 + 411: - 1753 str_post_ide_30 equ 0x1753 + 412: - 176E str_post_ide_40 equ 0x176E + 413: - 17DA str_post_nd equ 0x17DA + 414: - 1812 str_post_ok equ 0x1812 + 415: - 1789 str_post_pio equ 0x1789 + 416: - 17BF str_post_rtc equ 0x17BF + 417: - 17E8 str_post_rtc_iv equ 0x17E8 + 418: - 400A var_apu_present equ 0x400A + 419: - 402B var_buffer equ 0x402B + 420: - 4000 var_buffer_len equ 0x4000 + 421: - 411A var_bytes_count equ 0x411A + 422: - 4006 var_curserchar equ 0x4006 + 423: - 4007 var_curserlastaddr equ 0x4007 + 424: - 4005 var_curseron equ 0x4005 + 425: - 4004 var_curserstate equ 0x4004 + 426: - 4002 var_curserx equ 0x4002 + 427: - 4003 var_cursery equ 0x4003 + 428: - 4001 var_last_char equ 0x4001 + 429: - 4114 var_opcode equ 0x4114 + 430: - 4116 var_opcode_length equ 0x4116 + 431: - 4119 var_opcode_pcount equ 0x4119 + 432: - 4110 var_opcode_start equ 0x4110 + 433: - 4117 var_opcode_string equ 0x4117 + 434: - 4112 var_opcode_table equ 0x4112 + 435: - 4115 var_opcode_x equ 0x4115 + 436: - 4009 var_pio_present equ 0x4009 + 437: - 401B var_ps2mem equ 0x401B + 438: - 400B var_scratch equ 0x400B **** test.asm **** 2: - 8000 org 0x8000 3: - 4: - 00D0 IIC_RTC equ 11010000b - 5: ;Testing code - 6: - 7: 0+17 8000 CD1C80 CALL iic_init - 8: - 9: ;JP PROMPT_BEGIN - 10: - 11: 17+10 8003 010010 LD BC,$1000 - 12: 27+17 8006 CDEF80 CALL _pause_loop + 4: 0+17 8000 CD0880 call TermInit + 5: 17+10 8003 C9 ret + 6: ;------------------------------------------------- + 7: ; Z8C/MEGA80 VDP Console IO Functions + 8: ; by Dennis Gunia 2022/02 + 9: ; Version 0.1 + 10: ; + 11: ; For Z8C Monitor + 12: ;------------------------------------------------- 13: - 14: 44+10 8009 C39900 JP PROMPT_BEGIN - 15: - 16: 54+10 800C 1100C0 LD DE, 0xC000 ; Set I2C Buffer Location - 17: 64+7 800F 3E00 LD A,0x00 ; store string in buffer - 18: 71+7 8011 12 LD (DE),A - 19: 78+7 8012 06D0 LD B, IIC_RTC ; Set I2C Address - 20: 85+7 8014 3E01 LD A, 1 ; Set I2C Buffer length - 21: 92+17 8016 CD5E80 call iic_send - 22: - 23: - 24: - 25: - 26: 109+10 8019 C39900 JP PROMPT_BEGIN - 27: - 28: .include "include/kdrv_iic.s" -**** include/kdrv_iic.s **** - 1: - 00F5 CS_PIO_BD .EQU 0xF5 - 2: - 00F7 CS_PIO_BC .EQU 0xF7 - 3: - 00F4 CS_PIO_AD .EQU 0xF4 - 4: - 00F6 CS_PIO_AC .EQU 0xF6 - 5: - 6: - 00F3 CS_I2C_S1 .EQU 0xF3 - 7: - 00F2 CS_I2C_SX .EQU 0xF2 - 8: - 9: - 801C iic_init: - 10: 119+7 801C 3ECF LD A,0xCF - 11: 126+11 801E D3F6 OUT (CS_PIO_AC), A - 12: 137+7 8020 3EF5 LD A,11110101b - 13: 144+11 8022 D3F6 OUT (CS_PIO_AC), A - 14: - 15: 155+7 8024 3E00 LD A,00000000b ; Reset PCF8584 minimum 30 clock cycles - 16: 162+11 8026 D3F4 OUT (CS_PIO_AD), A + 14: ; Constant Values + 15: - 40E0 TermVarMemoryLocation equ 0x40E0 + 16: 17: - 18: 173+10 8028 010010 LD BC,0x1000 - 19: 183+17 802B CDEF80 CALL _pause_loop - 20: - 21: 200+7 802E 3E02 LD A,0000010b - 22: 207+11 8030 D3F4 OUT (CS_PIO_AD), A - 23: - 24: 218+10 8032 010010 LD BC,0x1000 - 25: 228+17 8035 CDEF80 CALL _pause_loop - 26: - 27: 245+7 8038 3E80 LD A, 0x80 ;S1 -> Select S0, PIN disabled, ESO = 0, Interrupt disabled, STA, STA, ACK = 0 - 28: 252+11 803A D3F3 OUT (CS_I2C_S1),A - 29: 263+17 803C CD0981 CALL _slow_access - 30: ;CALL _slow_access + 18: ; Dynamic VARs + 19: - 8004 TermVarTemplate: + 20: - 40E0 phase TermVarMemoryLocation ;Change pointers to this template to the specified location + 21: - 40E0 TermCurrentX: ; Start sector + 22: - 40E0 01 defb 0x01 + 23: - 40E1 TermCurrentY: ; Start sector + 24: - 40E1 04 defb 0x04 + 25: - 40E2 TermCursorState: + 26: - 40E2 00 defb 0x00 + 27: - 40E3 TermCursorEnabled: + 28: - 40E3 00 defb 0x00 + 29: - 40E4 TermVarTemplateEnd: + 30: - 8008 dephase 31: - 32: 280+7 803F 3E55 LD A,0x55 ;S0 -> Loads byte 55H into register S0'; effective own address becomes AAH - 33: 287+11 8041 D3F2 OUT (CS_I2C_SX),A - 34: 298+17 8043 CD0981 CALL _slow_access - 35: - 36: - 37: 315+7 8046 3EA0 LD A, 0xA0 ;S1 -> Loads byte A0H into register S1, i.e. next byte will be loaded into the clock control register S2. - 38: 322+11 8048 D3F3 OUT (CS_I2C_S1),A - 39: 333+17 804A CD0981 CALL _slow_access - 40: - 41: ; 000100000 - 42: 350+7 804D 3E18 LD A,0x18 ;Load 18H into S2 register (clock control - 4.43 MHz, 90 KHz) - 43: 357+7 804F 3E00 LD A,0x00 ;Load 18H into S2 register (clock control - 4.43 MHz, 90 KHz) - 44: 364+11 8051 D3F2 OUT (CS_I2C_SX),A - 45: 375+17 8053 CD0981 CALL _slow_access - 46: ;CALL _slow_access - 47: ;CALL _slow_access - 48: ;CALL _slow_access + 32: + 33: + 34: - 8008 TermInit: + 35: ; Copy TermVarTemplate to memory + 36: 27+10 8008 21E040 LD HL, TermVarMemoryLocation ;Load destination into HL + 37: 37+10 800B 010480 LD BC, [TermVarTemplate] ;Load source into BC + 38: 47+10 800E 11E440 LD DE, [TermVarTemplateEnd] ;Load end into DE + 39: - 8011 TermInit_copy_loop: + 40: 57+7 8011 0A LD A,(BC) ;Copy value + 41: 64+7 8012 77 LD (HL),A + 42: 71+6 8013 03 INC BC ;Increment pointers + 43: 77+6 8014 23 INC HL + 44: 83+11 8015 E5 PUSH HL ;Backup HL + 45: 94+15 8016 ED52 SBC HL,DE ;Check if next pointer matches end + 46: 109+10 8018 E1 POP HL ;Restore HL + 47: 119+10 8019 C21180 JP NZ, TermInit_copy_loop ;Loop if pointer != end + 48: ; template copy done 49: - 50: 392+7 8056 3EC1 LD A,0xC1 ;S1 -> loads byte C1H into register S1; register enable - 51: ;serial interface, set I 2C-bus into idle mode; - 52: ;SDA and SCL are HIGH. The next write or read - 53: ;operation will be to/from data transfer register - 54: ;S0 if A0 = LOW.; - 55: 399+11 8058 D3F3 OUT (CS_I2C_S1),A - 56: 410+17 805A CD0981 CALL _slow_access - 57: 427+10 805D C9 RET - 58: - 59: ;------------------------------------------------------------------------------ - 60: ; iic_send - 61: ; - 62: ; Sends data over the i2c bus - 63: ; A contains BYTE COUNTER - 64: ; B contains ADDRESS - 65: ; DE contains location of Data Buffer - 66: ;------------------------------------------------------------------------------ - 67: - 805E iic_send: - 68: ;CALL PRINTINLINE; - 69: ;defb "SEND A",10,13,0 - 70: 437+11 805E C5 PUSH BC - 71: 448+11 805F F5 PUSH AF - 72: 459+17 8060 CDE180 CALL iic_bus_rdy - 73: ;CALL PRINTINLINE - 74: ;defb "SEND START",10,13,0 - 75: 476+4 8063 78 LD A,B ;Load 'slave address' into S0 register: - 76: 480+11 8064 D3F2 OUT (CS_I2C_SX),A - 77: 491+17 8066 CD0981 CALL _slow_access - 78: - 79: 508+7 8069 3EC5 LD A, 0xC5 ;Load C5H into S1. 'C5H' = PCF8584 generates - 80: ;the 'START' condition and clocks out the slave - 81: ;address and the clock pulse for slave acknowledgement. - 82: 515+11 806B D3F3 OUT (CS_I2C_S1),A - 83: 526+10 806D F1 POP AF - 84: 536+4 806E 4F LD C,A - 85: 540+4 806F 0C INC C - 86: - 8070 _iic_send_1: ; LOOP 1 : Wait for bus ready - 87: 544+11 8070 DBF3 IN A,(CS_I2C_S1) ; Read byte from S1 register - 88: 555+8 8072 CB7F BIT 7,A ; Is bus free? (S1 ~BB=1?) - 89: 563+7+5 8074 20FA JR NZ,_iic_send_1 ; No - loop - 90: 570+8 8076 CB67 BIT 4,A ; slave acknowledged? (LRB = 0?) - 91: 578+7+5 8078 2009 JR NZ, _iic_send_stop ; if not, cancel transmission - 92: 585+7 807A 1A LD A,(DE) ; Load next byte from buffer - 93: 592+6 807B 13 INC DE - 94: 598+4 807C 0D DEC C - 95: 602+7+5 807D 2804 JR Z, _iic_send_stop ; if counter = 0, exit loop - 96: 609+11 807F D3F2 OUT (CS_I2C_SX),A ; Send byte - 97: 620+12 8081 18ED JR _iic_send_1 ; if counter > 0, loop again - 98: - 8083 _iic_send_stop: - 99: 632+7 8083 3EC3 LD A, 0xC3 ;STOP - 100: 639+11 8085 D3F3 OUT (CS_I2C_S1),A - 101: 650+17 8087 CD0981 CALL _slow_access - 102: 667+10 808A C1 POP BC - 103: 677+10 808B C9 RET - 104: - 105: - 106: ;------------------------------------------------------------------------------ - 107: ; iic_read - 108: ; - 109: ; Sends data over the i2c bus - 110: ; A contains BYTE COUNTER - 111: ; B contains ADDRESS - 112: ; DE contains location of Data Buffer - 113: ;------------------------------------------------------------------------------ - 114: - 808C iic_read: - 115: 687+11 808C D5 PUSH DE - 116: 698+11 808D C5 PUSH BC - 117: 709+11 808E F5 PUSH AF - 118: 720+4 808F 78 LD A,B ;Load 'slave address' into S0 register: - 119: 724+7 8090 F601 OR 0x01 ;Set RW Bit for read operation - 120: 731+11 8092 D3F2 OUT (CS_I2C_SX),A - 121: 742+17 8094 CD0981 CALL _slow_access - 122: 759+17 8097 CDE180 CALL iic_bus_rdy ; Is bus ready - 123: 776+7 809A 3EC5 LD A, 0xC5 ;Load C5H into S1. 'C5H' = PCF8584 generates - 124: ;the 'START' condition and clocks out the slave - 125: ;address and the clock pulse for slave acknowledgement. - 126: 783+11 809C D3F3 OUT (CS_I2C_S1),A - 127: ;Setup counter - 128: 794+10 809E F1 POP AF - 129: 804+4 809F 4F LD C,A ; Load BYTE COUNTER into C - 130: 808+4 80A0 0C INC C ; Offset C by 1 - 131: - 80A1 _iic_read_1: ;Wait for PIN = 0 - 132: 812+11 80A1 DBF3 IN A,(CS_I2C_S1) ; Read byte from S1 register - 133: 823+8 80A3 CB7F BIT 7,A ; S1 PIN=1? - 134: 831+7+5 80A5 20FA JR NZ,_iic_read_1 ; No - loop - 135: 838+8 80A7 CB5F BIT 3,A ; S1 LRB=0? slave ACK? - 136: 846+7+5 80A9 201C JR NZ, _iic_read_error ; No ACK -> an error has occured - 137: 853+4 80AB 0D DEC C - 138: 857+4 80AC 79 LD A, C - 139: 861+4 80AD 3D DEC A ;If n = m − 1? - 140: 865+7+5 80AE 2806 JR Z, _iic_read_last - 141: 872+11 80B0 DBF2 IN A,(CS_I2C_SX) - 142: 883+7 80B2 12 LD (DE),A - 143: 890+6 80B3 13 INC DE - 144: 896+12 80B4 18EB JR _iic_read_1 - 145: - 80B6 _iic_read_last: ;read last byte - 146: 908+7 80B6 3E40 LD A, 0x40 - 147: 915+11 80B8 D3F3 OUT (CS_I2C_S1),A - 148: 926+17 80BA CD0981 CALL _slow_access - 149: 943+11 80BD DBF2 IN A,(CS_I2C_SX) ;receives the final data byte. Neg. ACK is also sent. - 150: 954+7 80BF 12 LD (DE),A - 151: 961+6 80C0 13 INC DE - 152: - 80C1 _iic_read_last_1: - 153: 967+11 80C1 DBF3 IN A,(CS_I2C_S1) ; Read byte from S1 register - 154: 978+8 80C3 CB7F BIT 7,A ; S1 PIN=1? - 155: 986+7+5 80C5 20FA JR NZ,_iic_read_last_1 ; No - loop - 156: - 157: - 80C7 _iic_read_error: - 158: 993+4 80C7 00 NOP - 159: - 80C8 _iic_read_stop: - 160: 997+7 80C8 3EC3 LD A, 0xC3 - 161: 1004+11 80CA D3F3 OUT (CS_I2C_S1),A - 162: 1015+17 80CC CD0981 CALL _slow_access - 163: 1032+11 80CF DBF2 IN A,(CS_I2C_SX) ;transfers the final data byte from the - 164: ;data buffer to accumulator. - 165: 1043+17 80D1 CD0981 CALL _slow_access - 166: 1060+7 80D4 12 LD (DE),A - 167: 1067+10 80D5 C1 POP BC - 168: 1077+10 80D6 D1 POP DE - 169: 1087+10 80D7 C9 RET - 170: - 171: - 172: ;------------------------------------------------------------------------------ - 173: ; iic_rdy - 174: ; - 175: ; Waits until the PCF8584 signals a byte transmission/reception is complete. - 176: ;------------------------------------------------------------------------------ - 177: - 80D8 iic_rdy: - 178: 1097+11 80D8 F5 PUSH AF - 179: - 80D9 _iic_rdy_loop: - 180: 1108+11 80D9 DBF3 IN A,(CS_I2C_S1) ; Read byte from S1 register - 181: 1119+8 80DB CB7F BIT 7,A ; Is Tx/Rx complete? (S1 PIN=0?) - 182: ;call print_a_hex - 183: 1127+7+5 80DD 20FA JR NZ,_iic_rdy_loop ; No - loop - 184: - 80DF _iic_rdy_done: - 185: 1134+10 80DF F1 POP AF - 186: 1144+10 80E0 C9 RET - 187: - 188: ;------------------------------------------------------------------------------ - 189: ; i2c_bus_rdy - 190: ; - 191: ; Waits until the I2C bus is free before RETurning - 192: ;------------------------------------------------------------------------------ - 193: - 80E1 iic_bus_rdy: - 194: 1154+11 80E1 F5 PUSH AF - 195: - 80E2 _iic_blp: - 196: 1165+11 80E2 DBF3 IN A,(CS_I2C_S1) ; Read byte from S1 register - 197: 1176+11 80E4 F5 PUSH AF - 198: 1187+17 80E5 CDE702 call print_a_hex - 199: 1204+10 80E8 F1 POP AF - 200: 1214+8 80E9 CB47 BIT 0,A ; Is bus free? (S1 ~BB=1?) - 201: 1222+7+5 80EB 28F5 JR Z,_iic_blp ; No - loop - 202: 1229+10 80ED F1 POP AF - 203: 1239+10 80EE C9 RET + 50: + 51: ; install font + 52: 129+17 801C CDF181 call setup_vars + 53: 146+10 801F 21E084 ld hl, TmsFont + 54: 156+17 8022 CD3783 call TmsTextMode ; initialize text mode + 55: + 56: 173+7 8025 3E0C ld a, TmsDarkGreen ; set colors + 57: 180+17 8027 CD9C82 call TmsBackground + 58: 197+7 802A 3E0F ld a, TmsWhite + 59: 204+17 802C CD4D84 call TmsTextColor + 60: + 61: 221+7 802F 3E00 ld a, 0 ; put title at 11, 1 + 62: 228+7 8031 1E00 ld e, 0 + 63: 235+17 8033 CD6084 call TmsTextPos + 64: 252+10 8036 216981 ld hl, TitleMessage ; output title + 65: 262+17 8039 CD7784 call TmsStrOut + 66: + 67: 279+7 803C 3E00 ld a, 0 ; put title at 11, 1 + 68: 286+7 803E 1E04 ld e, 4 + 69: 293+17 8040 CD6084 call TmsTextPos + 70: + 71: + 72: 310+10 8043 C9 ret + 73: + 74: - 8044 TermSetCursor: + 75: 320+13 8044 3AE140 ld a, (TermCurrentY) + 76: 333+4 8047 5F ld e, a + 77: 337+13 8048 3AE040 ld a, (TermCurrentX) + 78: + 79: 350+17 804B CD6084 call TmsTextPos + 80: 367+10 804E C9 ret + 81: + 82: - 804F TermPrintStr: + 83: ; BC contains String offset + 84: ; Prints null terminated string + 85: 377+11 804F F5 PUSH AF + 86: 388+11 8050 C5 PUSH BC + 87: - 8051 TermPrintStr_LOOP: + 88: 399+7 8051 0A LD A,(BC) + 89: + 90: ; Return if nullbyte + 91: 406+7 8052 F600 OR 0 + 92: 413+7+5 8054 2807 JR Z, TermPrintStr_EXIT + 93: ; Print Char + 94: 420+17 8056 CD6080 CALL TermPrintChar + 95: + 96: ; INC BC and JP start of loop + 97: 437+6 8059 03 INC BC + 98: 443+10 805A C35180 jp TermPrintStr_LOOP + 99: - 805D TermPrintStr_EXIT: + 100: 453+10 805D C1 POP BC + 101: 463+10 805E F1 POP AF + 102: 473+10 805F C9 RET + 103: + 104: - 8060 TermPrintChar: + 105: 483+11 8060 F5 push AF + 106: 494+11 8061 C5 push BC + 107: 505+11 8062 D5 push DE + 108: 516+11 8063 E5 push HL + 109: ; check if special char + 110: 527+7 8064 FE7F cp 0x7F ; Backspace + 111: 534+10 8066 CAA180 jp z, TermPrintCharSPDelete + 112: 544+7 8069 FE0D cp 13 + 113: 551+10 806B CAF480 jp z, TermPrintCharSPCR + 114: 561+7 806E FE0A cp 10 + 115: 568+10 8070 CAD480 jp z, TermPrintCharSPLF + 116: ; a has char + 117: 578+17 8073 CD8082 call TmsChrOut + 118: 595+13 8076 3AE040 ld a,(TermCurrentX) + 119: 608+4 8079 3C inc a + 120: 612+7 807A FE27 cp 39 + 121: 619+10 807C CA8B80 jp z,TermPrintCharWrap; if line end + 122: 629+10 807F D28B80 jp nc,TermPrintCharWrap; if line end + 123: 639+13 8082 32E040 ld (TermCurrentX), a + 124: 652+17 8085 CD4480 call TermSetCursor + 125: 669+10 8088 C3FE80 jp TermPrintCharDone + 126: - 808B TermPrintCharWrap: + 127: 679+4 808B AF xor a + 128: 683+13 808C 32E040 ld (TermCurrentX), a + 129: 696+13 808F 3AE140 ld a,(TermCurrentY) + 130: 709+7 8092 FE17 cp 23 ; if already last line + 131: 716+10 8094 CAE680 jp z, TermPrintCharSPLFScroll + 132: 726+4 8097 3C inc a + 133: 730+13 8098 32E140 ld (TermCurrentY),a + 134: 743+17 809B CD4480 call TermSetCursor + 135: 760+10 809E C3FE80 jp TermPrintCharDone + 136: - 80A1 TermPrintCharSPDelete: + 137: 770+13 80A1 3AE040 ld a,(TermCurrentX) + 138: 783+4 80A4 A7 and a + 139: 787+10 80A5 CABA80 jp z, TermPrintCharSPDeleteWrap ; if at pos X 0 then go previous line + 140: 797+4 80A8 3D dec a ; else decrement X + 141: 801+13 80A9 32E040 ld (TermCurrentX), a + 142: 814+17 80AC CD4480 call TermSetCursor + 143: 831+7 80AF 3E20 ld a, " " + 144: 838+17 80B1 CD8082 call TmsChrOut + 145: 855+17 80B4 CD4480 call TermSetCursor + 146: 872+10 80B7 C3FE80 jp TermPrintCharDone + 147: - 80BA TermPrintCharSPDeleteWrap: + 148: 882+7 80BA 3E27 ld a,39 + 149: 889+13 80BC 32E040 ld (TermCurrentX), a + 150: 902+13 80BF 3AE140 ld a,(TermCurrentY) + 151: 915+4 80C2 3D dec a + 152: 919+13 80C3 32E140 ld (TermCurrentY),a + 153: 932+17 80C6 CD4480 call TermSetCursor + 154: 949+7 80C9 3E20 ld a, " " + 155: 956+17 80CB CD8082 call TmsChrOut + 156: 973+17 80CE CD4480 call TermSetCursor + 157: 990+10 80D1 C3FE80 jp TermPrintCharDone + 158: + 159: - 80D4 TermPrintCharSPLF: ; linefeed + 160: 1000+13 80D4 3AE140 ld a,(TermCurrentY) + 161: 1013+7 80D7 FE17 cp 23 ; if already last line + 162: 1020+10 80D9 CAE680 jp z, TermPrintCharSPLFScroll + 163: 1030+4 80DC 3C inc a + 164: 1034+13 80DD 32E140 ld (TermCurrentY),a + 165: 1047+17 80E0 CD4480 call TermSetCursor + 166: 1064+10 80E3 C3FE80 jp TermPrintCharDone + 167: - 80E6 TermPrintCharSPLFScroll: + 168: 1074+17 80E6 CD0381 call TermScroll + 169: 1091+7 80E9 3E17 ld a,23 + 170: 1098+13 80EB 32E140 ld (TermCurrentY),a + 171: 1111+17 80EE CD4480 call TermSetCursor + 172: 1128+10 80F1 C3FE80 jp TermPrintCharDone + 173: - 80F4 TermPrintCharSPCR: ; linefeed + 174: 1138+4 80F4 AF xor a + 175: 1142+13 80F5 32E040 ld (TermCurrentX),a + 176: 1155+17 80F8 CD4480 call TermSetCursor + 177: 1172+10 80FB C3FE80 jp TermPrintCharDone + 178: + 179: - 80FE TermPrintCharDone: + 180: 1182+10 80FE E1 pop HL + 181: 1192+10 80FF D1 pop DE + 182: 1202+10 8100 C1 pop BC + 183: 1212+10 8101 F1 pop AF + 184: 1222+10 8102 C9 ret + 185: + 186: - 8103 TermScroll: + 187: 1232+10 8103 010038 ld bc, 0x3800 ; load start of text-buffer into pointer + 188: + 189: - 8106 TermScrollLine: + 190: 1242+4 8106 60 ld h,b + 191: 1246+4 8107 69 ld l,c + 192: + 193: 1250+10 8108 112800 ld de, 40 ; line width + 194: 1260+11 810B 19 add hl, de + 195: + 196: 1271+4 810C 7D ld a,l ; setup VDP address + 197: 1275+11 810D D381 out (0x81),a + 198: 1286+4 810F 7C ld a,h + 199: 1290+7 8110 E63F and 3fh + 200: 1297+11 8112 D381 out (0x81),a + 201: 1308+17 8114 CD6481 call VDPWait + 202: 1325+11 8117 DB80 in a, (0x80) ; read byte + 203: 1336+11 8119 F5 push af 204: - 205: - 206: ;------------------------------------------------------------------------------ - 207: ; _pause_loop - 208: ; - 209: ; Timer function - 210: ; - 211: ; 16-bit (BC) decrement counter, performing 4xNEG loop until BC - 212: ; reaches zero. - 213: ; - 214: ; 61 T-states in loop = 15.25uS per loop @ 4 MHz - near enough - 215: ; a second delay for 65,535 iterations. - 216: ; - 217: ; Set iteration count in BC before calling this function. - 218: ; Destroys: BC - 219: ;------------------------------------------------------------------------------ - 220: - 80EF _pause_loop: - 221: 1249+11 80EF F5 PUSH AF ; 11 T-states - 222: - 80F0 _pause_loop_lp: - 223: ;NEG ; 8 T-states - 224: ;NEG ; 8 T-states - 225: ;NEG ; 8 T-states - 226: ;NEG ; 8 T-states - 227: 1260+11 80F0 C5 PUSH BC ; 11 T-states - 228: 1271+10 80F1 C1 POP BC ; 10 T-states - 229: 1281+11 80F2 C5 PUSH BC ; 11 T-states - 230: 1292+10 80F3 C1 POP BC ; 10 T-states - 231: 1302+6 80F4 0B DEC BC ; 6 T-states - 232: 1308+4 80F5 79 LD A,C ; 9 T-states - 233: 1312+4 80F6 B0 OR B ; 4 T-states - 234: 1316+10 80F7 C2F080 JP NZ,_pause_loop_lp ; 10 T-states - 235: 1326+10 80FA F1 POP AF ; 10 T-states - 236: 1336+10 80FB C9 RET ; Pause complete, RETurn + 205: 1347+4 811A 79 ld a,c ; setup VDP address + 206: 1351+11 811B D381 out (0x81),a + 207: 1362+4 811D 78 ld a,b + 208: 1366+7 811E E63F and 3fh + 209: 1373+7 8120 F640 or 40h ; write bit + 210: 1380+11 8122 D381 out (0x81),a + 211: 1391+10 8124 F1 pop af + 212: 1401+17 8125 CD6481 call VDPWait + 213: 1418+11 8128 D380 out (0x80),a + 214: + 215: 1429+6 812A 03 inc bc + 216: + 217: 1435+4 812B 60 ld h,b + 218: 1439+4 812C 69 ld l,c + 219: 1443+10 812D 11983B ld de, VDPTextBufferEnd ; buffer end + 220: 1453+15 8130 ED52 sbc hl, de + 221: + 222: 1468+10 8132 C20681 jp nz, TermScrollLine + 223: + 224: ; clear last line + 225: 1478+10 8135 019803 ld bc,920 + 226: 1488+4 8138 79 ld a,c ; setup VDP address + 227: 1492+11 8139 D381 out (0x81),a + 228: 1503+4 813B 78 ld a,b + 229: 1507+7 813C E63F and 3fh + 230: 1514+7 813E F640 or 40h ; write bit + 231: 1521+11 8140 D381 out (0x81),a + 232: 1532+7 8142 0E28 ld c,40 + 233: - 8144 TermScrollClearLine: + 234: 1539+10 8144 01983B ld bc, 0x3800 + 920 + 235: - 8147 TermScrollClearLineLoop: + 236: + 237: 1549+4 8147 79 ld a,c ; setup VDP addressh + 238: 1553+11 8148 D381 out (0x81),a + 239: 1564+4 814A 78 ld a,b + 240: 1568+7 814B E63F and 3fh + 241: 1575+7 814D F640 or 40h ; write bit + 242: 1582+11 814F D381 out (0x81),a + 243: 1593+7 8151 3E20 ld a, ' ' + 244: 1600+11 8153 D380 out (0x80),a + 245: 1611+17 8155 CD6481 call VDPWait + 246: + 247: 1628+6 8158 03 inc bc + 248: 1634+4 8159 60 ld h,b + 249: 1638+4 815A 69 ld l,c + 250: 1642+10 815B 11C03B ld de, 0x3800 + 960 ; buffer end + 251: 1652+15 815E ED52 sbc hl, de + 252: + 253: 1667+10 8160 C24781 jp nz, TermScrollClearLineLoop + 254: 1677+10 8163 C9 ret + 255: + 256: - 8164 VDPWait: + 257: 1687+4 8164 00 nop + 258: 1691+4 8165 00 nop + 259: 1695+4 8166 00 nop + 260: 1699+4 8167 00 nop + 261: 1703+10 8168 C9 ret + 262: + 263: - 0000 VDPTextBufferStart equ 0 + 264: - 3B98 VDPTextBufferEnd equ 0x3800 + 920 + 265: + 266: - 8169 TitleMessage: + 267: - 8169 20205A38 db ' Z8C Mk IV - A Z80 Homebrew Computer ' + 43204D6B + 20495620 + 2D204120 + 5A383020 + 486F6D65 + 62726577 + 20436F6D + 70757465 + 72202020 + 268: - 8191 2020524F db ' ROM Ver. 1.0 by Dennis Gunia (2022) ' + 4D205665 + 722E2031 + 2E302062 + 79204465 + 6E6E6973 + 2047756E + 69612028 + 32303232 + 29202020 + 269: - 81B9 20202020 db ' 48k RAM - 4MHz Z80 CPU ',0 + 20202020 + 2034386B + 2052414D + 202D2034 + 4D487A20 + 5A383020 + 43505520 + 20202020 + 20202020 + 00 + 270: + 271: - 81E2 TmsSubs: + 272: .include "tms.s" ; TMS graphics routines +**** include/tms.s **** + 1: ; TMS9918A graphics subroutines + 2: ; Copyright 2018-2020 J.B. Langston + 3: ; + 4: ; Permission is hereby granted, free of charge, to any person obtaining a + 5: ; copy of this software and associated documentation files (the "Software"), + 6: ; to deal in the Software without restriction, including without limitation + 7: ; the rights to use, copy, modify, merge, publish, distribute, sublicense, + 8: ; and/or sell copies of the Software, and to permit persons to whom the + 9: ; Software is furnished to do so, subject to the following conditions: + 10: ; + 11: ; The above copyright notice and this permission notice shall be included in + 12: ; all copies or substantial portions of the Software. + 13: ; + 14: ; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + 15: ; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + 16: ; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + 17: ; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + 18: ; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + 19: ; FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + 20: ; DEALINGS IN THE SOFTWARE. + 21: + 22: ; VDP Programmer's Guide: http://map.grauw.nl/resources/video/ti-vdp-programmers-guide.pdf + 23: + 24: - E400 phase 0xE400 + 25: ; --------------------------------------------------------------------------- + 26: ; configuration parameters; can be changed at runtime + 27: - E400 TmsPort: + 28: - E400 E0 defb 0xE0 ; port for TMS vram (reg is 1 higher) + 29: - E401 TmsWait: + 30: - E401 40 defb 64 ; iterations to wait after ram access + 31: - E402 TmsMode: + 32: - E402 0000 defw 0 ; mode registers + 33: - E404 TmsNameAddr: + 34: - E404 0038 defw 3800h ; name table address (multiples of 400H) + 35: - E406 TmsColorAddr: + 36: - E406 0020 defw 2000h ; color table address (multiples of 40H) + 37: - E408 TmsPatternAddr: + 38: - E408 0000 defw 0 ; pattern table (multiples of 800H) + 39: - E40A TmsSpritePatternAddr: + 40: - E40A 0018 defw 1800h ; sprite attribute table (multiples of 80H) + 41: - E40C TmsSpriteAttrAddr: + 42: - E40C C03B defw 3bc0h ; sprite pattern table (multiples of 800H) + 43: - E40E TmsScreenColors: + 44: - E40E 00 defb 0 ; background (low nybble), text color (high nybble) + 45: ; --------------------------------------------------------------------------- + 46: ; register constants + 47: - 81F1 dephase + 48: - 81F1 setup_vars: + 49: + 50: 1713+7 81F1 3EE0 ld a,0xE0 + 51: 1720+13 81F3 3200E4 ld (TmsPort),a + 52: + 53: 1733+7 81F6 3E02 ld a,2 + 54: 1740+13 81F8 3201E4 ld (TmsWait),a + 55: + 56: 1753+7 81FB 3E00 ld a,0 + 57: 1760+13 81FD 3202E4 ld (TmsMode),a + 58: 1773+7 8200 3E00 ld a,0 + 59: 1780+13 8202 3203E4 ld (TmsMode+1),a + 60: + 61: 1793+7 8205 3E00 ld a,0 + 62: 1800+13 8207 3204E4 ld (TmsNameAddr),a + 63: 1813+7 820A 3E38 ld a,38h + 64: 1820+13 820C 3205E4 ld (TmsNameAddr+1),a + 65: + 66: 1833+7 820F 3E00 ld a,0 + 67: 1840+13 8211 3208E4 ld (TmsPatternAddr),a + 68: 1853+7 8214 3E00 ld a,0 + 69: 1860+13 8216 3209E4 ld (TmsPatternAddr+1),a + 70: + 71: 1873+7 8219 3E00 ld a,0 + 72: 1880+13 821B 3206E4 ld (TmsColorAddr),a + 73: 1893+7 821E 3E20 ld a,20h + 74: 1900+13 8220 3207E4 ld (TmsColorAddr+1),a + 75: + 76: + 77: 1913+7 8223 3E00 ld a,0 + 78: 1920+13 8225 320AE4 ld (TmsSpritePatternAddr),a + 79: 1933+7 8228 3E18 ld a,0x18 + 80: 1940+13 822A 320BE4 ld (TmsSpritePatternAddr+1),a + 81: + 82: + 83: 1953+7 822D 3EC0 ld a,0xc0 + 84: 1960+13 822F 320CE4 ld (TmsSpriteAttrAddr),a + 85: 1973+7 8232 3E3B ld a,0x3b + 86: 1980+13 8234 320DE4 ld (TmsSpriteAttrAddr+1),a + 87: + 88: 1993+10 8237 C9 ret + 89: + 90: - 0040 TmsWriteBit: equ 40h ; bit to indicate memory write + 91: + 92: ; Registers + 93: - 0080 TmsCtrl0Reg: equ 80h + 94: - 0081 TmsCtrl1Reg: equ 81h + 95: - 0082 TmsNameReg: equ 82h + 96: - 0083 TmsColorTableReg: equ 83h + 97: - 0084 TmsPatternReg: equ 84h + 98: - 0085 TmsSpriteAttrReg: equ 85h + 99: - 0086 TmsSpritePatternReg: equ 86h + 100: - 0087 TmsColorReg: equ 87h + 101: + 102: ; Control Register Bits + 103: - 0200 TmsM3: equ 200h + 104: - 0100 TmsExtVideo: equ 100h + 105: - 0080 Tms16k: equ 80h + 106: - 0040 TmsDisplayEnable: equ 40h + 107: - 0020 TmsIntEnableBit: equ 20h + 108: - 0010 TmsM1: equ 10h + 109: - 0008 TmsM2: equ 8 + 110: - 0002 TmsSprite32: equ 2 + 111: - 0001 TmsSpriteMag: equ 1 + 112: + 113: ; --------------------------------------------------------------------------- + 114: ; table lengths + 115: + 116: - 0300 TmsTileNameLen: equ 300h + 117: - 03C0 TmsTextNameLen: equ 3c0h + 118: + 119: - 0020 TmsTileColorLen: equ 20h + 120: - 0800 TmsBitmapColorLen: equ 800h + 121: + 122: - 0800 TmsTilePatternLen: equ 800h + 123: - 0800 TmsTextPatternLen: equ 800h + 124: - 0600 TmsMulticolorPatternLen: equ 600h + 125: - 1800 TmsBitmapPatternLen: equ 1800h + 126: + 127: ; --------------------------------------------------------------------------- + 128: ; color constants + 129: + 130: - 0000 TmsTransparent: equ 0 + 131: - 0001 TmsBlack: equ 1 + 132: - 0002 TmsMediumGreen: equ 2 + 133: - 0003 TmsLightGreen: equ 3 + 134: - 0004 TmsDarkBlue: equ 4 + 135: - 0005 TmsLightBlue: equ 5 + 136: - 0006 TmsDarkRed: equ 6 + 137: - 0007 TmsCyan: equ 7 + 138: - 0008 TmsMediumRed: equ 8 + 139: - 0009 TmsLightRed: equ 9 + 140: - 000A TmsDarkYellow: equ 0ah + 141: - 000B TmsLightYellow: equ 0bh + 142: - 000C TmsDarkGreen: equ 0ch + 143: - 000D TmsMagenta: equ 0dh + 144: - 000E TmsGray: equ 0eh + 145: - 000F TmsWhite: equ 0fh + 146: + 147: ; --------------------------------------------------------------------------- + 148: ; port I/O routines + 149: + 150: ; These routines access the ports configured in TmsPort. + 151: + 152: ; These memory locations can be set at runtime to support different hardware + 153: ; configurations from the same binary. TmsProbe automatically detects the + 154: ; TMS9918A on common ports. + 155: + 156: ; The TMS9918A RAM must not be accessed more than once every 8 us or display + 157: ; corruption may occur. During vblank and with the display disabled, + 158: ; accesses can be 2 us apart, but we will always use 8 us minimum delay. + 159: + 160: ; TmsRamIn/TmsRamOut include a configurable delay loop, which waits for the + 161: ; configured iterations between VRAM writes to work properly with faster CPUs + 162: + 163: ; Minimum time to execute each procedure call: + 164: ; Z80: 88 cycles, 8.8 us @ 10 MHz + 165: ; Z180: 80 cycles, 8.64 us @ 9.216 MHz, 4.32 us @ 18.432, 2.16 us @ 36.864 + 166: ; + 167: ; Additional delay per djnz iteration: + 168: ; Z80: 8 cycles * (iterations - 1) + 169: ; 0.8 us @ 10 MHz + 170: ; Z180: 7 cycles * (iterations - 1) + 171: ; 0.756 us @ 9.216 MHz, 0.378 us @ 18.432, 0.189 us @ 36.864 + 172: + 173: ; Delay loop iterations required for different CPU speeds: + 174: ; Z80 @ 10 MHz or less: 1 + 175: ; Z180 @ 9.216 MHz or less: 1 + 176: ; Z180 @ 18.432 MHz: 10 + 177: ; Z180 @ 36.864 MHz: 31 + 178: - 8238 010A1F TmsWaits: defb 1, 10, 31 ; wait iterations to add for different CPU speeds + 179: + 180: ; set up wait time based on clock multiplier in E + 181: - 823B TmsSetWait: + 182: 2003+7 823B 3E01 ld a,1 + 183: 2010+13 823D 3201E4 ld (TmsWait), a + 184: 2023+10 8240 C9 ret + 185: + 186: ; try to find TMS9918A on common ports + 187: - 8241 TmsProbe: + 188: 2033+10 8241 216582 ld hl, TmsPorts + 189: 2043+7 8244 0603 ld b, TmsNumPorts + 190: - 8246 TmsProbeNext: + 191: 2050+7 8246 7E ld a, (hl) + 192: 2057+13 8247 3200E4 ld (TmsPort), a + 193: 2070+17 824A CD7682 call TmsRegIn ; clear vsync bit + 194: 2087+17 824D CD7682 call TmsRegIn ; check it again + 195: 2104+10 8250 FA6082 jp m, TmsProbeFailed ; if still set, not a TMS9918A + 196: 2114+10 8253 11FFFF ld de, 0ffffh ; long enough for another vsync + 197: - 8256 TmsProbeWait: + 198: 2124+17 8256 CD7682 call TmsRegIn ; check vsync bit again + 199: 2141+5+6 8259 F8 ret m ; if set, it's a TMS9918A (and Z is clear) + 200: 2146+6 825A 1B dec de ; otherwise, keep waiting + 201: 2152+4 825B 7B ld a, e + 202: 2156+4 825C B2 or d + 203: 2160+10 825D C25682 jp nz, TmsProbeWait + 204: - 8260 TmsProbeFailed: + 205: 2170+6 8260 23 inc hl ; if still clear after this long, try next port + 206: 2176+8+5 8261 10E3 djnz TmsProbeNext + 207: 2184+4 8263 AF xor a ; set Z if we ran out of ports to check + 208: 2188+10 8264 C9 ret + 209: + 210: - 8265 TmsPorts: ; List of ports to probe: + 211: - 8265 80 defb 0x80 ; ColecoVision / SG-1000 + 212: - 8266 98 defb 98h ; MSX + 213: - 8267 10 defb 10h ; Sord M5 (conflicts with z80ctrl SIO port) + 214: ;defb 8 ; Tatung Einstein (conflicts with z80ctrl drive ports) + 215: ;defb 1 ; MTX (not supported by TMS9918A video card) + 216: ; add additional ports to check here + 217: - 0003 TmsNumPorts: equ $ - TmsPorts + 218: + 219: ; set a single register value + 220: ; A = register value + 221: ; E = register to set + 222: - 8268 TmsSetReg: + 223: 2198+17 8268 CD6C82 call TmsRegOut + 224: 2215+4 826B 7B ld a, e + 225: ; fallthrough to TmsRegOut + 226: + 227: ; write to configured register port + 228: ; parameters: + 229: ; A = value to write + 230: - 826C TmsRegOut: + 231: 2219+11 826C C5 push bc + 232: 2230+20 826D ED4B00E4 ld bc, (TmsPort) + 233: 2250+4 8271 0C inc c + 234: 2254+12 8272 ED79 out (c), a + 235: 2266+10 8274 C1 pop bc + 236: 2276+10 8275 C9 ret 237: - 238: - 239: - 80FC iic_force_stop: - 240: 1346+11 80FC DBF3 IN A,(CS_I2C_S1) - 241: 1357+8 80FE CB47 BIT 0, A - 242: 1365+5+6 8100 C0 RET NZ - 243: 1370+7 8101 3EC3 LD A, 11000011b - 244: 1377+11 8103 D3F3 OUT (CS_I2C_S1),A - 245: 1388+4 8105 00 NOP - 246: 1392+4 8106 00 NOP - 247: 1396+12 8107 18F3 JR iic_force_stop + 238: ; read from configured register port + 239: ; returns: + 240: ; A = value read + 241: - 8276 TmsRegIn: + 242: 2286+11 8276 C5 push bc + 243: 2297+20 8277 ED4B00E4 ld bc, (TmsPort) + 244: 2317+4 827B 0C inc c + 245: 2321+12 827C ED78 in a, (c) + 246: 2333+10 827E C1 pop bc + 247: 2343+10 827F C9 ret 248: - 249: - 8109 _slow_access: - 250: 1408+4 8109 00 NOP - 251: 1412+4 810A 00 NOP - 252: 1416+4 810B 00 NOP - 253: 1420+4 810C 00 NOP - 254: 1424+4 810D 00 NOP - 255: 1428+4 810E 00 NOP - 256: 1432+4 810F 00 NOP - 257: 1436+4 8110 00 NOP - 258: 1440+11 8111 F5 PUSH AF - 259: 1451+10 8112 F1 POP AF - 260: 1461+11 8113 F5 PUSH AF - 261: 1472+10 8114 F1 POP AF - 262: 1482+11 8115 F5 PUSH AF - 263: 1493+10 8116 F1 POP AF - 264: 1503+11 8117 F5 PUSH AF - 265: 1514+10 8118 F1 POP AF - 266: 1524+11 8119 F5 PUSH AF - 267: 1535+10 811A F1 POP AF - 268: 1545+11 811B F5 PUSH AF - 269: 1556+10 811C F1 POP AF + 249: ; write to configured VRAM port + 250: ; parameters: + 251: ; A = value to write + 252: ; Z80 | Z180 cycles... + 253: - 8280 TmsRamOut: ; 17 | 16 (call) + 254: 2353+11 8280 C5 push bc ; 11 | 11 + 255: 2364+20 8281 ED4B00E4 ld bc, (TmsPort) ; 20 | 18 + 256: 2384+12 8285 ED79 out (c), a ; 12 | 10 + 257: - 8287 TmsRamOutDelay: + 258: 2396+8+5 8287 10FE djnz TmsRamOutDelay ; 8 | 7 plus (13 | 9) * (iterations-1) + 259: 2404+10 8289 C1 pop bc ; 10 | 9 + 260: 2414+10 828A C9 ret ; 10 | 9 + 261: + 262: ; read from configured VRAM port + 263: ; returns: + 264: ; A = value read + 265: - 828B TmsRamIn: + 266: 2424+11 828B C5 push bc + 267: 2435+20 828C ED4B00E4 ld bc, (TmsPort) + 268: - 8290 TmsRamInDelay: + 269: 2455+8+5 8290 10FE djnz TmsRamInDelay + 270: 2463+12 8292 ED78 in a, (c) + 271: 2475+20 8294 ED4B00E4 ld bc, (TmsPort) + 272: - 8298 TmsRamInDelay2: + 273: 2495+8+5 8298 10FE djnz TmsRamInDelay2 + 274: 2503+10 829A C1 pop bc + 275: 2513+10 829B C9 ret + 276: + 277: ; --------------------------------------------------------------------------- + 278: ; register configuration routines + 279: + 280: ; set the background color + 281: ; A = requested color + 282: - 829C TmsBackground: + 283: 2523+7 829C E60F and 0fh + 284: 2530+4 829E 47 ld b, a + 285: 2534+13 829F 3A0EE4 ld a, (TmsScreenColors) + 286: 2547+7 82A2 E6F0 and 0f0h + 287: 2554+4 82A4 B0 or b + 288: 2558+13 82A5 320EE4 ld (TmsScreenColors), a + 289: 2571+7 82A8 1E87 ld e, TmsColorReg + 290: 2578+10 82AA C36882 jp TmsSetReg + 291: + 292: ; set the sprite configuration + 293: ; A = sprite options + 294: - 82AD TmsSpriteConfig: + 295: 2588+7 82AD E603 and TmsSprite32|TmsSpriteMag + 296: 2595+4 82AF 47 ld b, a + 297: 2599+13 82B0 3A02E4 ld a, (TmsMode) + 298: 2612+7 82B3 E6FC and ~(TmsSprite32|TmsSpriteMag) + 299: 2619+4 82B5 B0 or b + 300: 2623+13 82B6 3202E4 ld (TmsMode), a + 301: 2636+7 82B9 1E81 ld e, TmsCtrl1Reg + 302: 2643+10 82BB C36882 jp TmsSetReg + 303: + 304: + 305: ; enable vblank interrupts + 306: - 82BE TmsIntEnable: + 307: 2653+13 82BE 3A02E4 ld a, (TmsMode) + 308: 2666+7 82C1 F620 or TmsIntEnableBit + 309: 2673+13 82C3 3202E4 ld (TmsMode), a + 310: 2686+7 82C6 1E81 ld e, TmsCtrl1Reg + 311: 2693+10 82C8 C36882 jp TmsSetReg + 312: + 313: ; disable vblank interrupts + 314: - 82CB TmsIntDisable: + 315: 2703+13 82CB 3A02E4 ld a, (TmsMode) + 316: 2716+7 82CE E6DF and ~TmsIntEnableBit + 317: 2723+13 82D0 3202E4 ld (TmsMode), a + 318: 2736+7 82D3 1E81 ld e, TmsCtrl1Reg + 319: 2743+10 82D5 C36882 jp TmsSetReg + 320: + 321: ; --------------------------------------------------------------------------- + 322: ; initialization routines + 323: + 324: - 0080 TmsBlankFlags: equ Tms16k + 325: - 00C0 TmsTileFlags: equ Tms16k | TmsDisplayEnable + 326: - 00D0 TmsTextFlags: equ Tms16k | TmsDisplayEnable | TmsM1 + 327: - 00C8 TmsMulticolorFlags: equ Tms16k | TmsDisplayEnable | TmsM2 + 328: - 02C0 TmsBitmapFlags: equ Tms16k | TmsDisplayEnable | TmsM3 + 329: + 330: ; reset registers and clear all 16KB of video memory + 331: - 82D8 TmsReset: + 332: 2753+10 82D8 218000 ld hl, TmsBlankFlags ; blank the screen with 16KB enabled + 333: 2763+16 82DB 2202E4 ld (TmsMode), hl + 334: 2779+4 82DE 7D ld a, l + 335: 2783+7 82DF 1E81 ld e, TmsCtrl1Reg + 336: 2790+17 82E1 CD6882 call TmsSetReg + 337: 2807+4 82E4 7C ld a, h + 338: 2811+7 82E5 1E80 ld e, TmsCtrl0Reg + 339: 2818+17 82E7 CD6882 call TmsSetReg + 340: 2835+7 82EA 3E00 ld a, TmsTransparent + 341: 2842+17 82EC CD9C82 call TmsBackground + 342: 2859+7 82EF 3E00 ld a, TmsTransparent + 343: 2866+17 82F1 CD4D84 call TmsTextColor + 344: 2883+10 82F4 110000 ld de, 0 ; clear entire VRAM + 345: 2893+10 82F7 010040 ld bc, 4000h + 346: 2903+7 82FA 3E00 ld a, 0 + 347: 2910+17 82FC CD3E84 call TmsFill + 348: 2927+10 82FF C9 ret + 349: + 350: ; initialize for multicolor mode + 351: - 8300 TmsMulticolor: + 352: 2937+17 8300 CDD882 call TmsReset + 353: 2954+20 8303 ED5B04E4 ld de, (TmsNameAddr) + 354: 2974+17 8307 CD1784 call TmsWriteAddr + 355: 2991+7 830A 1606 ld d, 6 ; name table has 6 sections + 356: 2998+7 830C 1E00 ld e, 0 ; lines in first section start at 0 + 357: - 830E TmsSectionLoop: + 358: 3005+7 830E 0E04 ld c, 4 ; each section has 4 identical lines + 359: - 8310 TmsLineLoop: + 360: 3012+7 8310 0620 ld b, 32 ; each line is 32 bytes long + 361: 3019+4 8312 7B ld a, e ; same starting value for each line in section + 362: - 8313 TmsByteLoop: + 363: 3023+17 8313 CD8082 call TmsRamOut + 364: 3040+4 8316 3C inc a ; byte value + 365: 3044+8+5 8317 10FA djnz TmsByteLoop + 366: 3052+4 8319 0D dec c ; line counter + 367: 3056+10 831A C21083 jp nz, TmsLineLoop + 368: 3066+4 831D 5F ld e, a ; next starting value = current + 32 + 369: 3070+4 831E 15 dec d ; section counter + 370: 3074+10 831F C20E83 jp nz, TmsSectionLoop + 371: 3084+10 8322 21C800 ld hl, TmsMulticolorFlags + 372: 3094+16 8325 2202E4 ld (TmsMode), hl + 373: 3110+10 8328 C34C83 jp TmsInitNonBitmap + 374: + 375: ; initialize for tiled graphics + 376: - 832B TmsTile: + 377: 3120+17 832B CDD882 call TmsReset + 378: 3137+10 832E 21C000 ld hl, TmsTileFlags + 379: 3147+16 8331 2202E4 ld (TmsMode), hl + 380: 3163+10 8334 C34C83 jp TmsInitNonBitmap + 381: + 382: ; initialize for text mode + 383: ; HL = address of font to load + 384: - 8337 TmsTextMode: + 385: 3173+11 8337 E5 push hl + 386: 3184+17 8338 CDD882 call TmsReset + 387: 3201+10 833B E1 pop hl + 388: 3211+20 833C ED5B08E4 ld de, (TmsPatternAddr) ; load font from address in hl + 389: 3231+10 8340 010008 ld bc, TmsTextPatternLen + 390: 3241+17 8343 CD2F84 call TmsWrite + 391: 3258+10 8346 21D000 ld hl, TmsTextFlags + 392: 3268+16 8349 2202E4 ld (TmsMode), hl + 393: ; fallthrough to TmsInitNonBitmap + 394: + 395: ; non-bitmap color and pattern table configuration + 396: - 834C TmsInitNonBitmap: + 397: ; set up color table address (register = address / 400H) + 398: 3284+13 834C 3A06E4 ld a, (TmsColorAddr) + 399: 3297+7 834F E6C0 and 0c0h + 400: 3304+13 8351 3206E4 ld (TmsColorAddr), a + 401: 3317+4 8354 57 ld d, a + 402: 3321+13 8355 3A07E4 ld a, (TmsColorAddr+1) + 403: 3334+7 8358 E63F and 3fh + 404: 3341+13 835A 3207E4 ld (TmsColorAddr+1), a + 405: 3354+8 835D CB12 rl d + 406: 3362+4 835F 17 rla + 407: 3366+8 8360 CB12 rl d + 408: 3374+4 8362 17 rla + 409: 3378+7 8363 1E83 ld e, TmsColorTableReg + 410: 3385+17 8365 CD6882 call TmsSetReg + 411: + 412: ; set up pattern table address (register = address / 800H) + 413: 3402+4 8368 AF xor a + 414: 3406+13 8369 3208E4 ld (TmsPatternAddr), a + 415: 3419+13 836C 3A09E4 ld a, (TmsPatternAddr+1) + 416: 3432+7 836F E638 and 38h + 417: 3439+13 8371 3209E4 ld (TmsPatternAddr+1), a + 418: 3452+4 8374 0F rrca + 419: 3456+4 8375 0F rrca + 420: 3460+4 8376 0F rrca + 421: 3464+7 8377 1E84 ld e, TmsPatternReg + 422: 3471+17 8379 CD6882 call TmsSetReg + 423: 3488+10 837C C3CA83 jp TmsInitCommon + 424: + 425: ; initialize for bitmapped graphics + 426: - 837F TmsBitmap: + 427: 3498+17 837F CDD882 call TmsReset + 428: 3515+20 8382 ED5B04E4 ld de, (TmsNameAddr) ; initialize name table with 3 sets + 429: 3535+17 8386 CD1784 call TmsWriteAddr ; of 256 bytes ranging from 00-FF + 430: 3552+7 8389 0603 ld b, 3 + 431: 3559+4 838B AF xor a + 432: - 838C TmsBitmapLoop: + 433: 3563+17 838C CD8082 call TmsRamOut + 434: 3580+4 838F 3C inc a + 435: 3584+10 8390 C28C83 jp nz, TmsBitmapLoop + 436: 3594+8+5 8393 10F7 djnz TmsBitmapLoop + 437: 3602+10 8395 21C002 ld hl, TmsBitmapFlags + 438: 3612+16 8398 2202E4 ld (TmsMode), hl + 439: + 440: ; set up color table at 0H (register = 7FH) or 2000H (register = 0FFH) + 441: 3628+4 839B AF xor a + 442: 3632+13 839C 3206E4 ld (TmsColorAddr), a + 443: 3645+13 839F 3208E4 ld (TmsPatternAddr), a + 444: 3658+13 83A2 3A07E4 ld a, (TmsColorAddr+1) + 445: 3671+7 83A5 E620 and 20h + 446: 3678+13 83A7 3207E4 ld (TmsColorAddr+1), a + 447: 3691+7 83AA 3EFF ld a, 0ffh ; color table at 2000H + 448: 3698+10 83AC C2B183 jp nz, TmsColorTableHigh + 449: 3708+7 83AF 3E7F ld a, 7fh ; color table at 0H + 450: - 83B1 TmsColorTableHigh: + 451: 3715+7 83B1 1E83 ld e, TmsColorTableReg + 452: 3722+17 83B3 CD6882 call TmsSetReg + 453: + 454: ; set up pattern table at 0H (register = 3) or 2000H (register = 7) + 455: 3739+13 83B6 3A09E4 ld a, (TmsPatternAddr+1) + 456: 3752+7 83B9 E620 and 20h + 457: 3759+13 83BB 3209E4 ld (TmsPatternAddr+1), a + 458: 3772+7 83BE 3E07 ld a, 7 ; pattern table at 2000H + 459: 3779+10 83C0 C2C583 jp nz, TmsPatternTableHigh + 460: 3789+7 83C3 3E03 ld a, 3 ; pattern table at 0H + 461: - 83C5 TmsPatternTableHigh: + 462: 3796+7 83C5 1E84 ld e, TmsPatternReg + 463: 3803+17 83C7 CD6882 call TmsSetReg + 464: ; fall through to TmsInitCommon + 465: + 466: + 467: ; common initialization for all modes + 468: - 83CA TmsInitCommon: + 469: ; set up name table address (register = address / 400H) + 470: 3820+4 83CA AF xor a + 471: 3824+13 83CB 3204E4 ld (TmsNameAddr), a + 472: 3837+13 83CE 3A05E4 ld a, (TmsNameAddr+1) + 473: 3850+7 83D1 E63C and 3ch + 474: 3857+13 83D3 3205E4 ld (TmsNameAddr+1), a + 475: 3870+4 83D6 0F rrca + 476: 3874+4 83D7 0F rrca + 477: 3878+7 83D8 1E82 ld e, TmsNameReg + 478: 3885+17 83DA CD6882 call TmsSetReg + 479: + 480: ; set up sprite pattern table address (register = address / 80H) + 481: 3902+13 83DD 3A0CE4 ld a, (TmsSpriteAttrAddr) + 482: 3915+7 83E0 E680 and 80h + 483: 3922+13 83E2 320CE4 ld (TmsSpriteAttrAddr), a + 484: 3935+4 83E5 57 ld d, a + 485: 3939+13 83E6 3A0DE4 ld a, (TmsSpriteAttrAddr+1) + 486: 3952+7 83E9 E67F and 7fh + 487: 3959+8 83EB CB12 rl d + 488: 3967+4 83ED 17 rla + 489: 3971+7 83EE 1E85 ld e, TmsSpriteAttrReg + 490: 3978+17 83F0 CD6882 call TmsSetReg + 491: + 492: ; set up sprite attribute table address (register = address / 800H) + 493: 3995+4 83F3 AF xor a + 494: 3999+13 83F4 320AE4 ld (TmsSpritePatternAddr), a + 495: 4012+13 83F7 3A0BE4 ld a, (TmsSpritePatternAddr+1) + 496: 4025+7 83FA E638 and 38h + 497: 4032+13 83FC 320BE4 ld (TmsSpritePatternAddr+1), a + 498: 4045+4 83FF 0F rrca + 499: 4049+4 8400 0F rrca + 500: 4053+4 8401 0F rrca + 501: 4057+7 8402 1E86 ld e, TmsSpritePatternReg + 502: 4064+17 8404 CD6882 call TmsSetReg + 503: + 504: ; set up control registers + 505: 4081+7 8407 1E81 ld e, TmsCtrl1Reg + 506: 4088+13 8409 3A02E4 ld a, (TmsMode) + 507: 4101+17 840C CD6882 call TmsSetReg + 508: 4118+13 840F 3A03E4 ld a, (TmsMode+1) + 509: 4131+7 8412 1E80 ld e, TmsCtrl0Reg + 510: 4138+10 8414 C36882 jp TmsSetReg + 511: + 512: ; --------------------------------------------------------------------------- + 513: ; memory access routines + 514: + 515: ; set the next address of vram to write + 516: ; DE = address + 517: - 8417 TmsWriteAddr: + 518: 4148+4 8417 7B ld a, e ; send lsb + 519: 4152+17 8418 CD6C82 call TmsRegOut + 520: 4169+4 841B 7A ld a, d ; mask off msb to max of 16KB + 521: 4173+7 841C E63F and 3fh + 522: 4180+7 841E F640 or TmsWriteBit ; indicate that this is a write + 523: 4187+17 8420 CD6C82 call TmsRegOut + 524: 4204+10 8423 C9 ret + 525: + 526: ; set the next address of vram to read + 527: ; DE = address + 528: - 8424 TmsReadAddr: + 529: 4214+4 8424 7B ld a, e ; send lsb + 530: 4218+17 8425 CD6C82 call TmsRegOut + 531: 4235+4 8428 7A ld a, d ; mask off msb to max of 16KB + 532: 4239+7 8429 E63F and 3Fh + 533: 4246+17 842B CD6C82 call TmsRegOut + 534: 4263+10 842E C9 ret + 535: + 536: ; copy bytes from ram to vram + 537: ; HL = ram source address + 538: ; DE = vram destination address + 539: ; BC = byte count + 540: - 842F TmsWrite: + 541: 4273+17 842F CD1784 call TmsWriteAddr + 542: - 8432 TmsWriteLoop: + 543: 4290+7 8432 7E ld a, (hl) + 544: 4297+17 8433 CD8082 call TmsRamOut + 545: 4314+6 8436 23 inc hl + 546: 4320+6 8437 0B dec bc + 547: 4326+4 8438 78 ld a, b + 548: 4330+4 8439 B1 or c + 549: 4334+10 843A C23284 jp nz, TmsWriteLoop + 550: 4344+10 843D C9 ret + 551: + 552: ; fill a section of memory with a single value + 553: ; A = value to fill + 554: ; DE = vram destination address + 555: ; BC = byte count + 556: - 843E TmsFill: + 557: 4354+11 843E F5 push af + 558: 4365+17 843F CD1784 call TmsWriteAddr + 559: 4382+10 8442 F1 pop af + 560: - 8443 TmsFillLoop: + 561: 4392+17 8443 CD8082 call TmsRamOut + 562: 4409+4 8446 0D dec c + 563: 4413+10 8447 C24384 jp nz, TmsFillLoop + 564: 4423+8+5 844A 10F7 djnz TmsFillLoop + 565: 4431+10 844C C9 ret + 566: + 567: ; --------------------------------------------------------------------------- + 568: ; text routines + 569: ; set text color + 570: ; A = requested color + 571: - 844D TmsTextColor: + 572: 4441+4 844D 87 add a, a ; text color into high nybble + 573: 4445+4 844E 87 add a, a + 574: 4449+4 844F 87 add a, a + 575: 4453+4 8450 87 add a, a + 576: 4457+4 8451 47 ld b, a ; save for later + 577: 4461+13 8452 3A0EE4 ld a, (TmsScreenColors) ; get current colors + 578: 4474+7 8455 E60F and 0fh ; mask off old text color + 579: 4481+4 8457 B0 or b ; set new text color + 580: 4485+13 8458 320EE4 ld (TmsScreenColors), a + 581: 4498+7 845B 1E87 ld e, TmsColorReg + 582: 4505+10 845D C36882 jp TmsSetReg ; save it back + 583: + 584: ; set the address to place text at X/Y coordinate + 585: ; A = X + 586: ; E = Y + 587: - 8460 TmsTextPos: + 588: 4515+7 8460 1600 ld d, 0 + 589: 4522+10 8462 210000 ld hl, 0 + 590: 4532+11 8465 19 add hl, de ; Y x 1 + 591: 4543+11 8466 29 add hl, hl ; Y x 2 + 592: 4554+11 8467 29 add hl, hl ; Y x 4 + 593: 4565+11 8468 19 add hl, de ; Y x 5 + 594: 4576+11 8469 29 add hl, hl ; Y x 10 + 595: 4587+11 846A 29 add hl, hl ; Y x 20 + 596: 4598+11 846B 29 add hl, hl ; Y x 40 + 597: 4609+4 846C 5F ld e, a + 598: 4613+11 846D 19 add hl, de ; add X for final address + 599: 4624+20 846E ED5B04E4 ld de, (TmsNameAddr) ; add name table base address + 600: 4644+11 8472 19 add hl, de + 601: 4655+4 8473 EB ex de, hl + 602: 4659+10 8474 C31784 jp TmsWriteAddr + 603: + 604: ; copy a null-terminated string to VRAM + 605: ; HL = ram source address + 606: - 8477 TmsStrOut: + 607: 4669+7 8477 7E ld a, (hl) + 608: 4676+7 8478 FE00 cp 0 ; return when NULL is encountered + 609: 4683+5+6 847A C8 ret z + 610: 4688+17 847B CD8082 call TmsRamOut + 611: 4705+6 847E 23 inc hl + 612: 4711+10 847F C37784 jp TmsStrOut + 613: + 614: ; repeat a character a certain number of times + 615: ; A = character to output + 616: ; B = count + 617: - 8482 TmsRepeat: + 618: 4721+17 8482 CD8082 call TmsRamOut + 619: 4738+8+5 8485 10FB djnz TmsRepeat + 620: 4746+10 8487 C9 ret + 621: + 622: ; output a character + 623: ; A = character to output + 624: - 8280 TmsChrOut: equ TmsRamOut + 625: + 626: ; --------------------------------------------------------------------------- + 627: ; bitmap routines + 628: + 629: - A02F TmsClearPixel: equ 0A02Fh ; cpl, and b + 630: - 00B0 TmsSetPixel: equ 0B0h ; nop, or b + 631: + 632: ; set operation for TmsPlotPixel to perform + 633: ; HL = pixel operation (TmsClearPixel, TmsSetPixel) + 634: - 8488 TmsPixelOp: + 635: 4756+16 8488 22A984 ld (TmsPixelOpPlaceHolder), hl + 636: 4772+10 848B C9 ret + 637: + 638: ; set or clear pixel at X, Y position + 639: ; B = Y position + 640: ; C = X position + 641: - 848C TmsPlotPixel: + 642: 4782+4 848C 78 ld a, b ; bail out if Y coord > 191 + 643: 4786+7 848D FEC0 cp 192 + 644: 4793+5+6 848F D0 ret nc + 645: 4798+17 8490 CDCF84 call TmsXYAddr ; get address in DE for X/Y coord in BC + 646: 4815+4 8493 79 ld a, c ; get lower 3 bits of X coord + 647: 4819+7 8494 E607 and 7 + 648: 4826+7 8496 0600 ld b, 0 + 649: 4833+4 8498 4F ld c, a + 650: 4837+10 8499 21B384 ld hl, TmsMaskLookup ; address of mask in table + 651: 4847+11 849C 09 add hl, bc + 652: 4858+7 849D 46 ld b, (hl) ; save mask in B + 653: 4865+16 849E 2A08E4 ld hl, (TmsPatternAddr) ; get base address for pattern table + 654: 4881+11 84A1 19 add hl, de + 655: 4892+4 84A2 EB ex de, hl + 656: 4896+17 84A3 CD2484 call TmsReadAddr ; set read within pattern table + 657: 4913+17 84A6 CD8B82 call TmsRamIn + 658: - 84A9 TmsPixelOpPlaceHolder: + 659: 4930+4 84A9 B0 or b ; mask bit in previous byte + 660: 4934+4 84AA 00 nop ; place holder for 2 byte mask operation + 661: 4938+11 84AB F5 push af + 662: 4949+17 84AC CD1784 call TmsWriteAddr ; set write address within pattern table + 663: 4966+10 84AF F1 pop af + 664: 4976+10 84B0 C38082 jp TmsRamOut + 665: + 666: - 84B3 TmsMaskLookup: + 667: - 84B3 80402010 defb 80h, 40h, 20h, 10h, 8h, 4h, 2h, 1h + 08040201 + 668: + 669: ; set the color for a block of pixels in bitmap mode + 670: ; B = Y position + 671: ; C = X position + 672: ; A = foreground/background color to set + 673: - 84BB TmsPixelColor: + 674: 4986+11 84BB F5 push af + 675: 4997+4 84BC 78 ld a, b ; bail out if Y coord > 191 + 676: 5001+7 84BD FEC0 cp 192 + 677: 5008+5+6 84BF D0 ret nc + 678: 5013+17 84C0 CDCF84 call TmsXYAddr ; get address in DE for X/Y coord in BC + 679: 5030+16 84C3 2A06E4 ld hl, (TmsColorAddr) ; add the color table base address + 680: 5046+11 84C6 19 add hl, de + 681: 5057+4 84C7 EB ex de, hl + 682: 5061+17 84C8 CD1784 call TmsWriteAddr ; set write address within color table + 683: 5078+10 84CB F1 pop af + 684: 5088+10 84CC C38082 jp TmsRamOut + 685: + 686: ; calculate address byte containing X/Y coordinate + 687: ; B = Y position + 688: ; C = X position + 689: ; returns address in DE + 690: - 84CF TmsXYAddr: + 691: 5098+4 84CF 78 ld a, b ; d = (y / 8) + 692: 5102+4 84D0 0F rrca + 693: 5106+4 84D1 0F rrca + 694: 5110+4 84D2 0F rrca + 695: 5114+7 84D3 E61F and 1fh + 696: 5121+4 84D5 57 ld d, a + 697: + 698: 5125+4 84D6 79 ld a, c ; e = (x & f8) + 699: 5129+7 84D7 E6F8 and 0f8h + 700: 5136+4 84D9 5F ld e, a + 701: + 702: 5140+4 84DA 78 ld a, b ; e += (y & 7) + 703: 5144+7 84DB E607 and 7 + 704: 5151+4 84DD B3 or e + 705: 5155+4 84DE 5F ld e, a **** test.asm **** - 29: 1566+10 811D C9 RET - 30: - 31: - 32: ;------------------------------------------------------------------------------ - 33: ; PRINTINLINE - 34: ; - 35: ; String output function - 36: ; - 37: ; Prints in-line data (bytes immediately following the PRINTINLINE call) - 38: ; until a string terminator is encountered (0 - null char). - 39: ;------------------------------------------------------------------------------ - 40: - 811E PRINTINLINE: - 41: 1576+19 811E E3 EX (SP),HL ; PUSH HL and put RET ADDress into HL - 42: 1595+11 811F F5 PUSH AF - 43: 1606+11 8120 C5 PUSH BC - 44: - 8121 nxtILC: - 45: 1617+7 8121 7E LD A,(HL) - 46: 1624+7 8122 FE00 CP 0 - 47: 1631+7+5 8124 2806 JR Z,endPrint - 48: 1638+17 8126 CDB702 CALL print_char - 49: 1655+6 8129 23 INC HL - 50: 1661+12 812A 18F5 JR nxtILC - 51: - 812C endPrint: - 52: 1673+6 812C 23 INC HL ; Get past "null" terminator - 53: 1679+10 812D C1 POP BC - 54: 1689+10 812E F1 POP AF - 55: 1699+19 812F E3 EX (SP),HL ; PUSH new RET ADDress on stack and restore HL + 273: 5159+10 84DF C9 ret + 274: ; .include "utility.s" ; BDOS utility routines + 275: .include "font1.s" +**** include/font1.s **** + 1: - 84E0 TmsFont: + 2: ; 6x8 bitmap font by Oleg Kosenkov + 3: ; Source: https://github.com/idispatch/raster-fonts/blob/master/font-6x8.c + 4: + 5: ; code=0, hex=0x00, ascii="^@" + 6: - 84E0 00 defb 00000000b + 7: - 84E1 00 defb 00000000b + 8: - 84E2 00 defb 00000000b + 9: - 84E3 00 defb 00000000b + 10: - 84E4 00 defb 00000000b + 11: - 84E5 00 defb 00000000b + 12: - 84E6 00 defb 00000000b + 13: - 84E7 00 defb 00000000b + 14: + 15: ; code=1, hex=0x01, ascii="^A" + 16: - 84E8 38 defb 00111000b + 17: - 84E9 44 defb 01000100b + 18: - 84EA 6C defb 01101100b + 19: - 84EB 44 defb 01000100b + 20: - 84EC 54 defb 01010100b + 21: - 84ED 44 defb 01000100b + 22: - 84EE 38 defb 00111000b + 23: - 84EF 00 defb 00000000b + 24: + 25: ; code=2, hex=0x02, ascii="^B" + 26: - 84F0 38 defb 00111000b + 27: - 84F1 7C defb 01111100b + 28: - 84F2 54 defb 01010100b + 29: - 84F3 7C defb 01111100b + 30: - 84F4 44 defb 01000100b + 31: - 84F5 7C defb 01111100b + 32: - 84F6 38 defb 00111000b + 33: - 84F7 00 defb 00000000b + 34: + 35: ; code=3, hex=0x03, ascii="^C" + 36: - 84F8 00 defb 00000000b + 37: - 84F9 28 defb 00101000b + 38: - 84FA 7C defb 01111100b + 39: - 84FB 7C defb 01111100b + 40: - 84FC 7C defb 01111100b + 41: - 84FD 38 defb 00111000b + 42: - 84FE 10 defb 00010000b + 43: - 84FF 00 defb 00000000b + 44: + 45: ; code=4, hex=0x04, ascii="^D" + 46: - 8500 00 defb 00000000b + 47: - 8501 10 defb 00010000b + 48: - 8502 38 defb 00111000b + 49: - 8503 7C defb 01111100b + 50: - 8504 7C defb 01111100b + 51: - 8505 38 defb 00111000b + 52: - 8506 10 defb 00010000b + 53: - 8507 00 defb 00000000b + 54: + 55: ; code=5, hex=0x05, ascii="^E" + 56: - 8508 10 defb 00010000b + 57: - 8509 38 defb 00111000b + 58: - 850A 38 defb 00111000b + 59: - 850B 10 defb 00010000b + 60: - 850C 7C defb 01111100b + 61: - 850D 7C defb 01111100b + 62: - 850E 10 defb 00010000b + 63: - 850F 00 defb 00000000b + 64: + 65: ; code=6, hex=0x06, ascii="^F" + 66: - 8510 00 defb 00000000b + 67: - 8511 10 defb 00010000b + 68: - 8512 38 defb 00111000b + 69: - 8513 7C defb 01111100b + 70: - 8514 7C defb 01111100b + 71: - 8515 10 defb 00010000b + 72: - 8516 38 defb 00111000b + 73: - 8517 00 defb 00000000b + 74: + 75: ; code=7, hex=0x07, ascii="^G" + 76: - 8518 00 defb 00000000b + 77: - 8519 00 defb 00000000b + 78: - 851A 00 defb 00000000b + 79: - 851B 30 defb 00110000b + 80: - 851C 30 defb 00110000b + 81: - 851D 00 defb 00000000b + 82: - 851E 00 defb 00000000b + 83: - 851F 00 defb 00000000b + 84: + 85: ; code=8, hex=0x08, ascii="^H" + 86: - 8520 FC defb 11111100b + 87: - 8521 FC defb 11111100b + 88: - 8522 FC defb 11111100b + 89: - 8523 CC defb 11001100b + 90: - 8524 CC defb 11001100b + 91: - 8525 FC defb 11111100b + 92: - 8526 FC defb 11111100b + 93: - 8527 FC defb 11111100b + 94: + 95: ; code=9, hex=0x09, ascii="^I" + 96: - 8528 00 defb 00000000b + 97: - 8529 00 defb 00000000b + 98: - 852A 78 defb 01111000b + 99: - 852B 48 defb 01001000b + 100: - 852C 48 defb 01001000b + 101: - 852D 78 defb 01111000b + 102: - 852E 00 defb 00000000b + 103: - 852F 00 defb 00000000b + 104: + 105: ; code=10, hex=0x0A, ascii="^J" + 106: - 8530 FC defb 11111100b + 107: - 8531 FC defb 11111100b + 108: - 8532 84 defb 10000100b + 109: - 8533 B4 defb 10110100b + 110: - 8534 B4 defb 10110100b + 111: - 8535 84 defb 10000100b + 112: - 8536 FC defb 11111100b + 113: - 8537 FC defb 11111100b + 114: + 115: ; code=11, hex=0x0b, ascii="^K" + 116: - 8538 00 defb 00000000b + 117: - 8539 1C defb 00011100b + 118: - 853A 0C defb 00001100b + 119: - 853B 34 defb 00110100b + 120: - 853C 48 defb 01001000b + 121: - 853D 48 defb 01001000b + 122: - 853E 30 defb 00110000b + 123: - 853F 00 defb 00000000b + 124: + 125: ; code=12, hex=0x0C, ascii="^L" + 126: - 8540 38 defb 00111000b + 127: - 8541 44 defb 01000100b + 128: - 8542 44 defb 01000100b + 129: - 8543 38 defb 00111000b + 130: - 8544 10 defb 00010000b + 131: - 8545 38 defb 00111000b + 132: - 8546 10 defb 00010000b + 133: - 8547 00 defb 00000000b + 134: + 135: ; code=13, hex=0x0D, ascii="^M" + 136: - 8548 10 defb 00010000b + 137: - 8549 18 defb 00011000b + 138: - 854A 14 defb 00010100b + 139: - 854B 10 defb 00010000b + 140: - 854C 30 defb 00110000b + 141: - 854D 70 defb 01110000b + 142: - 854E 60 defb 01100000b + 143: - 854F 00 defb 00000000b + 144: + 145: ; code=14, hex=0x0E, ascii="^N" + 146: - 8550 0C defb 00001100b + 147: - 8551 34 defb 00110100b + 148: - 8552 2C defb 00101100b + 149: - 8553 34 defb 00110100b + 150: - 8554 2C defb 00101100b + 151: - 8555 6C defb 01101100b + 152: - 8556 60 defb 01100000b + 153: - 8557 00 defb 00000000b + 154: + 155: ; code=15, hex=0x0F, ascii="^O" + 156: - 8558 00 defb 00000000b + 157: - 8559 54 defb 01010100b + 158: - 855A 38 defb 00111000b + 159: - 855B 6C defb 01101100b + 160: - 855C 38 defb 00111000b + 161: - 855D 54 defb 01010100b + 162: - 855E 00 defb 00000000b + 163: - 855F 00 defb 00000000b + 164: + 165: ; code=16, hex=0x10, ascii="^P" + 166: - 8560 20 defb 00100000b + 167: - 8561 30 defb 00110000b + 168: - 8562 38 defb 00111000b + 169: - 8563 3C defb 00111100b + 170: - 8564 38 defb 00111000b + 171: - 8565 30 defb 00110000b + 172: - 8566 20 defb 00100000b + 173: - 8567 00 defb 00000000b + 174: + 175: ; code=17, hex=0x11, ascii="^Q" + 176: - 8568 08 defb 00001000b + 177: - 8569 18 defb 00011000b + 178: - 856A 38 defb 00111000b + 179: - 856B 78 defb 01111000b + 180: - 856C 38 defb 00111000b + 181: - 856D 18 defb 00011000b + 182: - 856E 08 defb 00001000b + 183: - 856F 00 defb 00000000b + 184: + 185: ; code=18, hex=0x12, ascii="^R" + 186: - 8570 10 defb 00010000b + 187: - 8571 38 defb 00111000b + 188: - 8572 7C defb 01111100b + 189: - 8573 10 defb 00010000b + 190: - 8574 7C defb 01111100b + 191: - 8575 38 defb 00111000b + 192: - 8576 10 defb 00010000b + 193: - 8577 00 defb 00000000b + 194: + 195: ; code=19, hex=0x13, ascii="^S" + 196: - 8578 28 defb 00101000b + 197: - 8579 28 defb 00101000b + 198: - 857A 28 defb 00101000b + 199: - 857B 28 defb 00101000b + 200: - 857C 28 defb 00101000b + 201: - 857D 00 defb 00000000b + 202: - 857E 28 defb 00101000b + 203: - 857F 00 defb 00000000b + 204: + 205: ; code=20, hex=0x14, ascii="^T" + 206: - 8580 3C defb 00111100b + 207: - 8581 54 defb 01010100b + 208: - 8582 54 defb 01010100b + 209: - 8583 34 defb 00110100b + 210: - 8584 14 defb 00010100b + 211: - 8585 14 defb 00010100b + 212: - 8586 14 defb 00010100b + 213: - 8587 00 defb 00000000b + 214: + 215: ; code=21, hex=0x15, ascii="^U" + 216: - 8588 38 defb 00111000b + 217: - 8589 44 defb 01000100b + 218: - 858A 30 defb 00110000b + 219: - 858B 28 defb 00101000b + 220: - 858C 18 defb 00011000b + 221: - 858D 44 defb 01000100b + 222: - 858E 38 defb 00111000b + 223: - 858F 00 defb 00000000b + 224: + 225: ; code=22, hex=0x16, ascii="^V" + 226: - 8590 00 defb 00000000b + 227: - 8591 00 defb 00000000b + 228: - 8592 00 defb 00000000b + 229: - 8593 00 defb 00000000b + 230: - 8594 00 defb 00000000b + 231: - 8595 78 defb 01111000b + 232: - 8596 78 defb 01111000b + 233: - 8597 00 defb 00000000b + 234: + 235: ; code=23, hex=0x17, ascii="^W" + 236: - 8598 10 defb 00010000b + 237: - 8599 38 defb 00111000b + 238: - 859A 7C defb 01111100b + 239: - 859B 10 defb 00010000b + 240: - 859C 7C defb 01111100b + 241: - 859D 38 defb 00111000b + 242: - 859E 10 defb 00010000b + 243: - 859F 38 defb 00111000b + 244: + 245: ; code=24, hex=0x18, ascii="^X" + 246: - 85A0 10 defb 00010000b + 247: - 85A1 38 defb 00111000b + 248: - 85A2 7C defb 01111100b + 249: - 85A3 10 defb 00010000b + 250: - 85A4 10 defb 00010000b + 251: - 85A5 10 defb 00010000b + 252: - 85A6 10 defb 00010000b + 253: - 85A7 00 defb 00000000b + 254: + 255: ; code=25, hex=0x19, ascii="^Y" + 256: - 85A8 10 defb 00010000b + 257: - 85A9 10 defb 00010000b + 258: - 85AA 10 defb 00010000b + 259: - 85AB 10 defb 00010000b + 260: - 85AC 7C defb 01111100b + 261: - 85AD 38 defb 00111000b + 262: - 85AE 10 defb 00010000b + 263: - 85AF 00 defb 00000000b + 264: + 265: ; code=26, hex=0x1A, ascii="^Z" + 266: - 85B0 00 defb 00000000b + 267: - 85B1 10 defb 00010000b + 268: - 85B2 18 defb 00011000b + 269: - 85B3 7C defb 01111100b + 270: - 85B4 18 defb 00011000b + 271: - 85B5 10 defb 00010000b + 272: - 85B6 00 defb 00000000b + 273: - 85B7 00 defb 00000000b + 274: + 275: ; code=27, hex=0x1B, ascii="^[" + 276: - 85B8 00 defb 00000000b + 277: - 85B9 10 defb 00010000b + 278: - 85BA 30 defb 00110000b + 279: - 85BB 7C defb 01111100b + 280: - 85BC 30 defb 00110000b + 281: - 85BD 10 defb 00010000b + 282: - 85BE 00 defb 00000000b + 283: - 85BF 00 defb 00000000b + 284: + 285: ; code=28, hex=0x1C, ascii="^\" + 286: - 85C0 00 defb 00000000b + 287: - 85C1 00 defb 00000000b + 288: - 85C2 00 defb 00000000b + 289: - 85C3 40 defb 01000000b + 290: - 85C4 40 defb 01000000b + 291: - 85C5 40 defb 01000000b + 292: - 85C6 7C defb 01111100b + 293: - 85C7 00 defb 00000000b + 294: + 295: ; code=29, hex=0x1D, ascii="^]" + 296: - 85C8 00 defb 00000000b + 297: - 85C9 28 defb 00101000b + 298: - 85CA 28 defb 00101000b + 299: - 85CB 7C defb 01111100b + 300: - 85CC 28 defb 00101000b + 301: - 85CD 28 defb 00101000b + 302: - 85CE 00 defb 00000000b + 303: - 85CF 00 defb 00000000b + 304: + 305: ; code=30, hex=0x1E, ascii="^^" + 306: - 85D0 10 defb 00010000b + 307: - 85D1 10 defb 00010000b + 308: - 85D2 38 defb 00111000b + 309: - 85D3 38 defb 00111000b + 310: - 85D4 7C defb 01111100b + 311: - 85D5 7C defb 01111100b + 312: - 85D6 00 defb 00000000b + 313: - 85D7 00 defb 00000000b + 314: + 315: ; code=31, hex=0x1F, ascii="^_" + 316: - 85D8 7C defb 01111100b + 317: - 85D9 7C defb 01111100b + 318: - 85DA 38 defb 00111000b + 319: - 85DB 38 defb 00111000b + 320: - 85DC 10 defb 00010000b + 321: - 85DD 10 defb 00010000b + 322: - 85DE 00 defb 00000000b + 323: - 85DF 00 defb 00000000b + 324: + 325: ; code=32, hex=0x20, ascii=" " + 326: - 85E0 00 defb 00000000b + 327: - 85E1 00 defb 00000000b + 328: - 85E2 00 defb 00000000b + 329: - 85E3 00 defb 00000000b + 330: - 85E4 00 defb 00000000b + 331: - 85E5 00 defb 00000000b + 332: - 85E6 00 defb 00000000b + 333: - 85E7 00 defb 00000000b + 334: + 335: ; code=33, hex=0x21, ascii="!" + 336: - 85E8 10 defb 00010000b + 337: - 85E9 38 defb 00111000b + 338: - 85EA 38 defb 00111000b + 339: - 85EB 10 defb 00010000b + 340: - 85EC 10 defb 00010000b + 341: - 85ED 00 defb 00000000b + 342: - 85EE 10 defb 00010000b + 343: - 85EF 00 defb 00000000b + 344: + 345: ; code=34, hex=0x22, ascii=""" + 346: - 85F0 6C defb 01101100b + 347: - 85F1 6C defb 01101100b + 348: - 85F2 48 defb 01001000b + 349: - 85F3 00 defb 00000000b + 350: - 85F4 00 defb 00000000b + 351: - 85F5 00 defb 00000000b + 352: - 85F6 00 defb 00000000b + 353: - 85F7 00 defb 00000000b + 354: + 355: ; code=35, hex=0x23, ascii="#" + 356: - 85F8 00 defb 00000000b + 357: - 85F9 28 defb 00101000b + 358: - 85FA 7C defb 01111100b + 359: - 85FB 28 defb 00101000b + 360: - 85FC 28 defb 00101000b + 361: - 85FD 7C defb 01111100b + 362: - 85FE 28 defb 00101000b + 363: - 85FF 00 defb 00000000b + 364: + 365: ; code=36, hex=0x24, ascii="$" + 366: - 8600 20 defb 00100000b + 367: - 8601 38 defb 00111000b + 368: - 8602 40 defb 01000000b + 369: - 8603 30 defb 00110000b + 370: - 8604 08 defb 00001000b + 371: - 8605 70 defb 01110000b + 372: - 8606 10 defb 00010000b + 373: - 8607 00 defb 00000000b + 374: + 375: ; code=37, hex=0x25, ascii="" + 376: - 8608 64 defb 01100100b + 377: - 8609 64 defb 01100100b + 378: - 860A 08 defb 00001000b + 379: - 860B 10 defb 00010000b + 380: - 860C 20 defb 00100000b + 381: - 860D 4C defb 01001100b + 382: - 860E 4C defb 01001100b + 383: - 860F 00 defb 00000000b + 384: + 385: ; code=38, hex=0x26, ascii="&" + 386: - 8610 20 defb 00100000b + 387: - 8611 50 defb 01010000b + 388: - 8612 50 defb 01010000b + 389: - 8613 20 defb 00100000b + 390: - 8614 54 defb 01010100b + 391: - 8615 48 defb 01001000b + 392: - 8616 34 defb 00110100b + 393: - 8617 00 defb 00000000b + 394: + 395: ; code=39, hex=0x27, ascii="'" + 396: - 8618 30 defb 00110000b + 397: - 8619 30 defb 00110000b + 398: - 861A 20 defb 00100000b + 399: - 861B 00 defb 00000000b + 400: - 861C 00 defb 00000000b + 401: - 861D 00 defb 00000000b + 402: - 861E 00 defb 00000000b + 403: - 861F 00 defb 00000000b + 404: + 405: ; code=40, hex=0x28, ascii="(" + 406: - 8620 10 defb 00010000b + 407: - 8621 20 defb 00100000b + 408: - 8622 20 defb 00100000b + 409: - 8623 20 defb 00100000b + 410: - 8624 20 defb 00100000b + 411: - 8625 20 defb 00100000b + 412: - 8626 10 defb 00010000b + 413: - 8627 00 defb 00000000b + 414: + 415: ; code=41, hex=0x29, ascii=")" + 416: - 8628 20 defb 00100000b + 417: - 8629 10 defb 00010000b + 418: - 862A 10 defb 00010000b + 419: - 862B 10 defb 00010000b + 420: - 862C 10 defb 00010000b + 421: - 862D 10 defb 00010000b + 422: - 862E 20 defb 00100000b + 423: - 862F 00 defb 00000000b + 424: + 425: ; code=42, hex=0x2A, ascii="*" + 426: - 8630 00 defb 00000000b + 427: - 8631 28 defb 00101000b + 428: - 8632 38 defb 00111000b + 429: - 8633 7C defb 01111100b + 430: - 8634 38 defb 00111000b + 431: - 8635 28 defb 00101000b + 432: - 8636 00 defb 00000000b + 433: - 8637 00 defb 00000000b + 434: + 435: ; code=43, hex=0x2B, ascii="+" + 436: - 8638 00 defb 00000000b + 437: - 8639 10 defb 00010000b + 438: - 863A 10 defb 00010000b + 439: - 863B 7C defb 01111100b + 440: - 863C 10 defb 00010000b + 441: - 863D 10 defb 00010000b + 442: - 863E 00 defb 00000000b + 443: - 863F 00 defb 00000000b + 444: + 445: ; code=44, hex=0x2C, ascii="," + 446: - 8640 00 defb 00000000b + 447: - 8641 00 defb 00000000b + 448: - 8642 00 defb 00000000b + 449: - 8643 00 defb 00000000b + 450: - 8644 00 defb 00000000b + 451: - 8645 30 defb 00110000b + 452: - 8646 30 defb 00110000b + 453: - 8647 20 defb 00100000b + 454: + 455: ; code=45, hex=0x2D, ascii="-" + 456: - 8648 00 defb 00000000b + 457: - 8649 00 defb 00000000b + 458: - 864A 00 defb 00000000b + 459: - 864B 7C defb 01111100b + 460: - 864C 00 defb 00000000b + 461: - 864D 00 defb 00000000b + 462: - 864E 00 defb 00000000b + 463: - 864F 00 defb 00000000b + 464: + 465: ; code=46, hex=0x2E, ascii="." + 466: - 8650 00 defb 00000000b + 467: - 8651 00 defb 00000000b + 468: - 8652 00 defb 00000000b + 469: - 8653 00 defb 00000000b + 470: - 8654 00 defb 00000000b + 471: - 8655 30 defb 00110000b + 472: - 8656 30 defb 00110000b + 473: - 8657 00 defb 00000000b + 474: + 475: ; code=47, hex=0x2F, ascii="/" + 476: - 8658 00 defb 00000000b + 477: - 8659 04 defb 00000100b + 478: - 865A 08 defb 00001000b + 479: - 865B 10 defb 00010000b + 480: - 865C 20 defb 00100000b + 481: - 865D 40 defb 01000000b + 482: - 865E 00 defb 00000000b + 483: - 865F 00 defb 00000000b + 484: + 485: ; code=48, hex=0x30, ascii="0" + 486: - 8660 38 defb 00111000b + 487: - 8661 44 defb 01000100b + 488: - 8662 4C defb 01001100b + 489: - 8663 54 defb 01010100b + 490: - 8664 64 defb 01100100b + 491: - 8665 44 defb 01000100b + 492: - 8666 38 defb 00111000b + 493: - 8667 00 defb 00000000b + 494: + 495: ; code=49, hex=0x31, ascii="1" + 496: - 8668 10 defb 00010000b + 497: - 8669 30 defb 00110000b + 498: - 866A 10 defb 00010000b + 499: - 866B 10 defb 00010000b + 500: - 866C 10 defb 00010000b + 501: - 866D 10 defb 00010000b + 502: - 866E 38 defb 00111000b + 503: - 866F 00 defb 00000000b + 504: + 505: ; code=50, hex=0x32, ascii="2" + 506: - 8670 38 defb 00111000b + 507: - 8671 44 defb 01000100b + 508: - 8672 04 defb 00000100b + 509: - 8673 18 defb 00011000b + 510: - 8674 20 defb 00100000b + 511: - 8675 40 defb 01000000b + 512: - 8676 7C defb 01111100b + 513: - 8677 00 defb 00000000b + 514: + 515: ; code=51, hex=0x33, ascii="3" + 516: - 8678 38 defb 00111000b + 517: - 8679 44 defb 01000100b + 518: - 867A 04 defb 00000100b + 519: - 867B 38 defb 00111000b + 520: - 867C 04 defb 00000100b + 521: - 867D 44 defb 01000100b + 522: - 867E 38 defb 00111000b + 523: - 867F 00 defb 00000000b + 524: + 525: ; code=52, hex=0x34, ascii="4" + 526: - 8680 08 defb 00001000b + 527: - 8681 18 defb 00011000b + 528: - 8682 28 defb 00101000b + 529: - 8683 48 defb 01001000b + 530: - 8684 7C defb 01111100b + 531: - 8685 08 defb 00001000b + 532: - 8686 08 defb 00001000b + 533: - 8687 00 defb 00000000b + 534: + 535: ; code=53, hex=0x35, ascii="5" + 536: - 8688 7C defb 01111100b + 537: - 8689 40 defb 01000000b + 538: - 868A 40 defb 01000000b + 539: - 868B 78 defb 01111000b + 540: - 868C 04 defb 00000100b + 541: - 868D 44 defb 01000100b + 542: - 868E 38 defb 00111000b + 543: - 868F 00 defb 00000000b + 544: + 545: ; code=54, hex=0x36, ascii="6" + 546: - 8690 18 defb 00011000b + 547: - 8691 20 defb 00100000b + 548: - 8692 40 defb 01000000b + 549: - 8693 78 defb 01111000b + 550: - 8694 44 defb 01000100b + 551: - 8695 44 defb 01000100b + 552: - 8696 38 defb 00111000b + 553: - 8697 00 defb 00000000b + 554: + 555: ; code=55, hex=0x37, ascii="7" + 556: - 8698 7C defb 01111100b + 557: - 8699 04 defb 00000100b + 558: - 869A 08 defb 00001000b + 559: - 869B 10 defb 00010000b + 560: - 869C 20 defb 00100000b + 561: - 869D 20 defb 00100000b + 562: - 869E 20 defb 00100000b + 563: - 869F 00 defb 00000000b + 564: + 565: ; code=56, hex=0x38, ascii="8" + 566: - 86A0 38 defb 00111000b + 567: - 86A1 44 defb 01000100b + 568: - 86A2 44 defb 01000100b + 569: - 86A3 38 defb 00111000b + 570: - 86A4 44 defb 01000100b + 571: - 86A5 44 defb 01000100b + 572: - 86A6 38 defb 00111000b + 573: - 86A7 00 defb 00000000b + 574: + 575: ; code=57, hex=0x39, ascii="9" + 576: - 86A8 38 defb 00111000b + 577: - 86A9 44 defb 01000100b + 578: - 86AA 44 defb 01000100b + 579: - 86AB 3C defb 00111100b + 580: - 86AC 04 defb 00000100b + 581: - 86AD 08 defb 00001000b + 582: - 86AE 30 defb 00110000b + 583: - 86AF 00 defb 00000000b + 584: + 585: ; code=58, hex=0x3A, ascii=":" + 586: - 86B0 00 defb 00000000b + 587: - 86B1 00 defb 00000000b + 588: - 86B2 30 defb 00110000b + 589: - 86B3 30 defb 00110000b + 590: - 86B4 00 defb 00000000b + 591: - 86B5 30 defb 00110000b + 592: - 86B6 30 defb 00110000b + 593: - 86B7 00 defb 00000000b + 594: + 595: ; code=59, hex=0x3B, ascii=";" + 596: - 86B8 00 defb 00000000b + 597: - 86B9 00 defb 00000000b + 598: - 86BA 30 defb 00110000b + 599: - 86BB 30 defb 00110000b + 600: - 86BC 00 defb 00000000b + 601: - 86BD 30 defb 00110000b + 602: - 86BE 30 defb 00110000b + 603: - 86BF 20 defb 00100000b + 604: + 605: ; code=60, hex=0x3C, ascii="<" + 606: - 86C0 08 defb 00001000b + 607: - 86C1 10 defb 00010000b + 608: - 86C2 20 defb 00100000b + 609: - 86C3 40 defb 01000000b + 610: - 86C4 20 defb 00100000b + 611: - 86C5 10 defb 00010000b + 612: - 86C6 08 defb 00001000b + 613: - 86C7 00 defb 00000000b + 614: + 615: ; code=61, hex=0x3D, ascii="=" + 616: - 86C8 00 defb 00000000b + 617: - 86C9 00 defb 00000000b + 618: - 86CA 7C defb 01111100b + 619: - 86CB 00 defb 00000000b + 620: - 86CC 00 defb 00000000b + 621: - 86CD 7C defb 01111100b + 622: - 86CE 00 defb 00000000b + 623: - 86CF 00 defb 00000000b + 624: + 625: ; code=62, hex=0x3E, ascii=">" + 626: - 86D0 20 defb 00100000b + 627: - 86D1 10 defb 00010000b + 628: - 86D2 08 defb 00001000b + 629: - 86D3 04 defb 00000100b + 630: - 86D4 08 defb 00001000b + 631: - 86D5 10 defb 00010000b + 632: - 86D6 20 defb 00100000b + 633: - 86D7 00 defb 00000000b + 634: + 635: ; code=63, hex=0x3F, ascii="?" + 636: - 86D8 38 defb 00111000b + 637: - 86D9 44 defb 01000100b + 638: - 86DA 04 defb 00000100b + 639: - 86DB 18 defb 00011000b + 640: - 86DC 10 defb 00010000b + 641: - 86DD 00 defb 00000000b + 642: - 86DE 10 defb 00010000b + 643: - 86DF 00 defb 00000000b + 644: + 645: ; code=64, hex=0x40, ascii="@" + 646: - 86E0 38 defb 00111000b + 647: - 86E1 44 defb 01000100b + 648: - 86E2 5C defb 01011100b + 649: - 86E3 54 defb 01010100b + 650: - 86E4 5C defb 01011100b + 651: - 86E5 40 defb 01000000b + 652: - 86E6 38 defb 00111000b + 653: - 86E7 00 defb 00000000b + 654: + 655: ; code=65, hex=0x41, ascii="A" + 656: - 86E8 38 defb 00111000b + 657: - 86E9 44 defb 01000100b + 658: - 86EA 44 defb 01000100b + 659: - 86EB 44 defb 01000100b + 660: - 86EC 7C defb 01111100b + 661: - 86ED 44 defb 01000100b + 662: - 86EE 44 defb 01000100b + 663: - 86EF 00 defb 00000000b + 664: + 665: ; code=66, hex=0x42, ascii="B" + 666: - 86F0 78 defb 01111000b + 667: - 86F1 44 defb 01000100b + 668: - 86F2 44 defb 01000100b + 669: - 86F3 78 defb 01111000b + 670: - 86F4 44 defb 01000100b + 671: - 86F5 44 defb 01000100b + 672: - 86F6 78 defb 01111000b + 673: - 86F7 00 defb 00000000b + 674: + 675: ; code=67, hex=0x43, ascii="C" + 676: - 86F8 38 defb 00111000b + 677: - 86F9 44 defb 01000100b + 678: - 86FA 40 defb 01000000b + 679: - 86FB 40 defb 01000000b + 680: - 86FC 40 defb 01000000b + 681: - 86FD 44 defb 01000100b + 682: - 86FE 38 defb 00111000b + 683: - 86FF 00 defb 00000000b + 684: + 685: ; code=68, hex=0x44, ascii="D" + 686: - 8700 78 defb 01111000b + 687: - 8701 44 defb 01000100b + 688: - 8702 44 defb 01000100b + 689: - 8703 44 defb 01000100b + 690: - 8704 44 defb 01000100b + 691: - 8705 44 defb 01000100b + 692: - 8706 78 defb 01111000b + 693: - 8707 00 defb 00000000b + 694: + 695: ; code=69, hex=0x45, ascii="E" + 696: - 8708 7C defb 01111100b + 697: - 8709 40 defb 01000000b + 698: - 870A 40 defb 01000000b + 699: - 870B 78 defb 01111000b + 700: - 870C 40 defb 01000000b + 701: - 870D 40 defb 01000000b + 702: - 870E 7C defb 01111100b + 703: - 870F 00 defb 00000000b + 704: + 705: ; code=70, hex=0x46, ascii="F" + 706: - 8710 7C defb 01111100b + 707: - 8711 40 defb 01000000b + 708: - 8712 40 defb 01000000b + 709: - 8713 78 defb 01111000b + 710: - 8714 40 defb 01000000b + 711: - 8715 40 defb 01000000b + 712: - 8716 40 defb 01000000b + 713: - 8717 00 defb 00000000b + 714: + 715: ; code=71, hex=0x47, ascii="G" + 716: - 8718 38 defb 00111000b + 717: - 8719 44 defb 01000100b + 718: - 871A 40 defb 01000000b + 719: - 871B 5C defb 01011100b + 720: - 871C 44 defb 01000100b + 721: - 871D 44 defb 01000100b + 722: - 871E 3C defb 00111100b + 723: - 871F 00 defb 00000000b + 724: + 725: ; code=72, hex=0x48, ascii="H" + 726: - 8720 44 defb 01000100b + 727: - 8721 44 defb 01000100b + 728: - 8722 44 defb 01000100b + 729: - 8723 7C defb 01111100b + 730: - 8724 44 defb 01000100b + 731: - 8725 44 defb 01000100b + 732: - 8726 44 defb 01000100b + 733: - 8727 00 defb 00000000b + 734: + 735: ; code=73, hex=0x49, ascii="I" + 736: - 8728 38 defb 00111000b + 737: - 8729 10 defb 00010000b + 738: - 872A 10 defb 00010000b + 739: - 872B 10 defb 00010000b + 740: - 872C 10 defb 00010000b + 741: - 872D 10 defb 00010000b + 742: - 872E 38 defb 00111000b + 743: - 872F 00 defb 00000000b + 744: + 745: ; code=74, hex=0x4A, ascii="J" + 746: - 8730 04 defb 00000100b + 747: - 8731 04 defb 00000100b + 748: - 8732 04 defb 00000100b + 749: - 8733 04 defb 00000100b + 750: - 8734 44 defb 01000100b + 751: - 8735 44 defb 01000100b + 752: - 8736 38 defb 00111000b + 753: - 8737 00 defb 00000000b + 754: + 755: ; code=75, hex=0x4B, ascii="K" + 756: - 8738 44 defb 01000100b + 757: - 8739 48 defb 01001000b + 758: - 873A 50 defb 01010000b + 759: - 873B 60 defb 01100000b + 760: - 873C 50 defb 01010000b + 761: - 873D 48 defb 01001000b + 762: - 873E 44 defb 01000100b + 763: - 873F 00 defb 00000000b + 764: + 765: ; code=76, hex=0x4C, ascii="L" + 766: - 8740 40 defb 01000000b + 767: - 8741 40 defb 01000000b + 768: - 8742 40 defb 01000000b + 769: - 8743 40 defb 01000000b + 770: - 8744 40 defb 01000000b + 771: - 8745 40 defb 01000000b + 772: - 8746 7C defb 01111100b + 773: - 8747 00 defb 00000000b + 774: + 775: ; code=77, hex=0x4D, ascii="M" + 776: - 8748 44 defb 01000100b + 777: - 8749 6C defb 01101100b + 778: - 874A 54 defb 01010100b + 779: - 874B 44 defb 01000100b + 780: - 874C 44 defb 01000100b + 781: - 874D 44 defb 01000100b + 782: - 874E 44 defb 01000100b + 783: - 874F 00 defb 00000000b + 784: + 785: ; code=78, hex=0x4E, ascii="N" + 786: - 8750 44 defb 01000100b + 787: - 8751 64 defb 01100100b + 788: - 8752 54 defb 01010100b + 789: - 8753 4C defb 01001100b + 790: - 8754 44 defb 01000100b + 791: - 8755 44 defb 01000100b + 792: - 8756 44 defb 01000100b + 793: - 8757 00 defb 00000000b + 794: + 795: ; code=79, hex=0x4F, ascii="O" + 796: - 8758 38 defb 00111000b + 797: - 8759 44 defb 01000100b + 798: - 875A 44 defb 01000100b + 799: - 875B 44 defb 01000100b + 800: - 875C 44 defb 01000100b + 801: - 875D 44 defb 01000100b + 802: - 875E 38 defb 00111000b + 803: - 875F 00 defb 00000000b + 804: + 805: ; code=80, hex=0x50, ascii="P" + 806: - 8760 78 defb 01111000b + 807: - 8761 44 defb 01000100b + 808: - 8762 44 defb 01000100b + 809: - 8763 78 defb 01111000b + 810: - 8764 40 defb 01000000b + 811: - 8765 40 defb 01000000b + 812: - 8766 40 defb 01000000b + 813: - 8767 00 defb 00000000b + 814: + 815: ; code=81, hex=0x51, ascii="Q" + 816: - 8768 38 defb 00111000b + 817: - 8769 44 defb 01000100b + 818: - 876A 44 defb 01000100b + 819: - 876B 44 defb 01000100b + 820: - 876C 54 defb 01010100b + 821: - 876D 48 defb 01001000b + 822: - 876E 34 defb 00110100b + 823: - 876F 00 defb 00000000b + 824: + 825: ; code=82, hex=0x52, ascii="R" + 826: - 8770 78 defb 01111000b + 827: - 8771 44 defb 01000100b + 828: - 8772 44 defb 01000100b + 829: - 8773 78 defb 01111000b + 830: - 8774 48 defb 01001000b + 831: - 8775 44 defb 01000100b + 832: - 8776 44 defb 01000100b + 833: - 8777 00 defb 00000000b + 834: + 835: ; code=83, hex=0x53, ascii="S" + 836: - 8778 38 defb 00111000b + 837: - 8779 44 defb 01000100b + 838: - 877A 40 defb 01000000b + 839: - 877B 38 defb 00111000b + 840: - 877C 04 defb 00000100b + 841: - 877D 44 defb 01000100b + 842: - 877E 38 defb 00111000b + 843: - 877F 00 defb 00000000b + 844: + 845: ; code=84, hex=0x54, ascii="T" + 846: - 8780 7C defb 01111100b + 847: - 8781 10 defb 00010000b + 848: - 8782 10 defb 00010000b + 849: - 8783 10 defb 00010000b + 850: - 8784 10 defb 00010000b + 851: - 8785 10 defb 00010000b + 852: - 8786 10 defb 00010000b + 853: - 8787 00 defb 00000000b + 854: + 855: ; code=85, hex=0x55, ascii="U" + 856: - 8788 44 defb 01000100b + 857: - 8789 44 defb 01000100b + 858: - 878A 44 defb 01000100b + 859: - 878B 44 defb 01000100b + 860: - 878C 44 defb 01000100b + 861: - 878D 44 defb 01000100b + 862: - 878E 38 defb 00111000b + 863: - 878F 00 defb 00000000b + 864: + 865: ; code=86, hex=0x56, ascii="V" + 866: - 8790 44 defb 01000100b + 867: - 8791 44 defb 01000100b + 868: - 8792 44 defb 01000100b + 869: - 8793 44 defb 01000100b + 870: - 8794 44 defb 01000100b + 871: - 8795 28 defb 00101000b + 872: - 8796 10 defb 00010000b + 873: - 8797 00 defb 00000000b + 874: + 875: ; code=87, hex=0x57, ascii="W" + 876: - 8798 44 defb 01000100b + 877: - 8799 44 defb 01000100b + 878: - 879A 54 defb 01010100b + 879: - 879B 54 defb 01010100b + 880: - 879C 54 defb 01010100b + 881: - 879D 54 defb 01010100b + 882: - 879E 28 defb 00101000b + 883: - 879F 00 defb 00000000b + 884: + 885: ; code=88, hex=0x58, ascii="X" + 886: - 87A0 44 defb 01000100b + 887: - 87A1 44 defb 01000100b + 888: - 87A2 28 defb 00101000b + 889: - 87A3 10 defb 00010000b + 890: - 87A4 28 defb 00101000b + 891: - 87A5 44 defb 01000100b + 892: - 87A6 44 defb 01000100b + 893: - 87A7 00 defb 00000000b + 894: + 895: ; code=89, hex=0x59, ascii="Y" + 896: - 87A8 44 defb 01000100b + 897: - 87A9 44 defb 01000100b + 898: - 87AA 44 defb 01000100b + 899: - 87AB 28 defb 00101000b + 900: - 87AC 10 defb 00010000b + 901: - 87AD 10 defb 00010000b + 902: - 87AE 10 defb 00010000b + 903: - 87AF 00 defb 00000000b + 904: + 905: ; code=90, hex=0x5A, ascii="Z" + 906: - 87B0 78 defb 01111000b + 907: - 87B1 08 defb 00001000b + 908: - 87B2 10 defb 00010000b + 909: - 87B3 20 defb 00100000b + 910: - 87B4 40 defb 01000000b + 911: - 87B5 40 defb 01000000b + 912: - 87B6 78 defb 01111000b + 913: - 87B7 00 defb 00000000b + 914: + 915: ; code=91, hex=0x5B, ascii="[" + 916: - 87B8 38 defb 00111000b + 917: - 87B9 20 defb 00100000b + 918: - 87BA 20 defb 00100000b + 919: - 87BB 20 defb 00100000b + 920: - 87BC 20 defb 00100000b + 921: - 87BD 20 defb 00100000b + 922: - 87BE 38 defb 00111000b + 923: - 87BF 00 defb 00000000b + 924: + 925: ; code=92, hex=0x5C, ascii="\" + 926: - 87C0 00 defb 00000000b + 927: - 87C1 40 defb 01000000b + 928: - 87C2 20 defb 00100000b + 929: - 87C3 10 defb 00010000b + 930: - 87C4 08 defb 00001000b + 931: - 87C5 04 defb 00000100b + 932: - 87C6 00 defb 00000000b + 933: - 87C7 00 defb 00000000b + 934: + 935: ; code=93, hex=0x5D, ascii="]" + 936: - 87C8 38 defb 00111000b + 937: - 87C9 08 defb 00001000b + 938: - 87CA 08 defb 00001000b + 939: - 87CB 08 defb 00001000b + 940: - 87CC 08 defb 00001000b + 941: - 87CD 08 defb 00001000b + 942: - 87CE 38 defb 00111000b + 943: - 87CF 00 defb 00000000b + 944: + 945: ; code=94, hex=0x5E, ascii="^" + 946: - 87D0 10 defb 00010000b + 947: - 87D1 28 defb 00101000b + 948: - 87D2 44 defb 01000100b + 949: - 87D3 00 defb 00000000b + 950: - 87D4 00 defb 00000000b + 951: - 87D5 00 defb 00000000b + 952: - 87D6 00 defb 00000000b + 953: - 87D7 00 defb 00000000b + 954: + 955: ; code=95, hex=0x5F, ascii="_" + 956: - 87D8 00 defb 00000000b + 957: - 87D9 00 defb 00000000b + 958: - 87DA 00 defb 00000000b + 959: - 87DB 00 defb 00000000b + 960: - 87DC 00 defb 00000000b + 961: - 87DD 00 defb 00000000b + 962: - 87DE 00 defb 00000000b + 963: - 87DF FC defb 11111100b + 964: + 965: ; code=96, hex=0x60, ascii="`" + 966: - 87E0 30 defb 00110000b + 967: - 87E1 30 defb 00110000b + 968: - 87E2 10 defb 00010000b + 969: - 87E3 00 defb 00000000b + 970: - 87E4 00 defb 00000000b + 971: - 87E5 00 defb 00000000b + 972: - 87E6 00 defb 00000000b + 973: - 87E7 00 defb 00000000b + 974: + 975: ; code=97, hex=0x61, ascii="a" + 976: - 87E8 00 defb 00000000b + 977: - 87E9 00 defb 00000000b + 978: - 87EA 38 defb 00111000b + 979: - 87EB 04 defb 00000100b + 980: - 87EC 3C defb 00111100b + 981: - 87ED 44 defb 01000100b + 982: - 87EE 3C defb 00111100b + 983: - 87EF 00 defb 00000000b + 984: + 985: ; code=98, hex=0x62, ascii="b" + 986: - 87F0 40 defb 01000000b + 987: - 87F1 40 defb 01000000b + 988: - 87F2 78 defb 01111000b + 989: - 87F3 44 defb 01000100b + 990: - 87F4 44 defb 01000100b + 991: - 87F5 44 defb 01000100b + 992: - 87F6 78 defb 01111000b + 993: - 87F7 00 defb 00000000b + 994: + 995: ; code=99, hex=0x63, ascii="c" + 996: - 87F8 00 defb 00000000b + 997: - 87F9 00 defb 00000000b + 998: - 87FA 38 defb 00111000b + 999: - 87FB 44 defb 01000100b +1000: - 87FC 40 defb 01000000b +1001: - 87FD 44 defb 01000100b +1002: - 87FE 38 defb 00111000b +1003: - 87FF 00 defb 00000000b +1004: +1005: ; code=100, hex=0x64, ascii="d" +1006: - 8800 04 defb 00000100b +1007: - 8801 04 defb 00000100b +1008: - 8802 3C defb 00111100b +1009: - 8803 44 defb 01000100b +1010: - 8804 44 defb 01000100b +1011: - 8805 44 defb 01000100b +1012: - 8806 3C defb 00111100b +1013: - 8807 00 defb 00000000b +1014: +1015: ; code=101, hex=0x65, ascii="e" +1016: - 8808 00 defb 00000000b +1017: - 8809 00 defb 00000000b +1018: - 880A 38 defb 00111000b +1019: - 880B 44 defb 01000100b +1020: - 880C 78 defb 01111000b +1021: - 880D 40 defb 01000000b +1022: - 880E 38 defb 00111000b +1023: - 880F 00 defb 00000000b +1024: +1025: ; code=102, hex=0x66, ascii="f" +1026: - 8810 18 defb 00011000b +1027: - 8811 20 defb 00100000b +1028: - 8812 20 defb 00100000b +1029: - 8813 78 defb 01111000b +1030: - 8814 20 defb 00100000b +1031: - 8815 20 defb 00100000b +1032: - 8816 20 defb 00100000b +1033: - 8817 00 defb 00000000b +1034: +1035: ; code=103, hex=0x67, ascii="g" +1036: - 8818 00 defb 00000000b +1037: - 8819 00 defb 00000000b +1038: - 881A 3C defb 00111100b +1039: - 881B 44 defb 01000100b +1040: - 881C 44 defb 01000100b +1041: - 881D 3C defb 00111100b +1042: - 881E 04 defb 00000100b +1043: - 881F 38 defb 00111000b +1044: +1045: ; code=104, hex=0x68, ascii="h" +1046: - 8820 40 defb 01000000b +1047: - 8821 40 defb 01000000b +1048: - 8822 70 defb 01110000b +1049: - 8823 48 defb 01001000b +1050: - 8824 48 defb 01001000b +1051: - 8825 48 defb 01001000b +1052: - 8826 48 defb 01001000b +1053: - 8827 00 defb 00000000b +1054: +1055: ; code=105, hex=0x69, ascii="i" +1056: - 8828 10 defb 00010000b +1057: - 8829 00 defb 00000000b +1058: - 882A 10 defb 00010000b +1059: - 882B 10 defb 00010000b +1060: - 882C 10 defb 00010000b +1061: - 882D 10 defb 00010000b +1062: - 882E 18 defb 00011000b +1063: - 882F 00 defb 00000000b +1064: +1065: ; code=106, hex=0x6A, ascii="j" +1066: - 8830 08 defb 00001000b +1067: - 8831 00 defb 00000000b +1068: - 8832 18 defb 00011000b +1069: - 8833 08 defb 00001000b +1070: - 8834 08 defb 00001000b +1071: - 8835 08 defb 00001000b +1072: - 8836 48 defb 01001000b +1073: - 8837 30 defb 00110000b +1074: +1075: ; code=107, hex=0x6B, ascii="k" +1076: - 8838 40 defb 01000000b +1077: - 8839 40 defb 01000000b +1078: - 883A 48 defb 01001000b +1079: - 883B 50 defb 01010000b +1080: - 883C 60 defb 01100000b +1081: - 883D 50 defb 01010000b +1082: - 883E 48 defb 01001000b +1083: - 883F 00 defb 00000000b +1084: +1085: ; code=108, hex=0x6C, ascii="l" +1086: - 8840 10 defb 00010000b +1087: - 8841 10 defb 00010000b +1088: - 8842 10 defb 00010000b +1089: - 8843 10 defb 00010000b +1090: - 8844 10 defb 00010000b +1091: - 8845 10 defb 00010000b +1092: - 8846 18 defb 00011000b +1093: - 8847 00 defb 00000000b +1094: +1095: ; code=109, hex=0x6D, ascii="m" +1096: - 8848 00 defb 00000000b +1097: - 8849 00 defb 00000000b +1098: - 884A 68 defb 01101000b +1099: - 884B 54 defb 01010100b +1100: - 884C 54 defb 01010100b +1101: - 884D 44 defb 01000100b +1102: - 884E 44 defb 01000100b +1103: - 884F 00 defb 00000000b +1104: +1105: ; code=110, hex=0x6E, ascii="n" +1106: - 8850 00 defb 00000000b +1107: - 8851 00 defb 00000000b +1108: - 8852 70 defb 01110000b +1109: - 8853 48 defb 01001000b +1110: - 8854 48 defb 01001000b +1111: - 8855 48 defb 01001000b +1112: - 8856 48 defb 01001000b +1113: - 8857 00 defb 00000000b +1114: +1115: ; code=111, hex=0x6F, ascii="o" +1116: - 8858 00 defb 00000000b +1117: - 8859 00 defb 00000000b +1118: - 885A 38 defb 00111000b +1119: - 885B 44 defb 01000100b +1120: - 885C 44 defb 01000100b +1121: - 885D 44 defb 01000100b +1122: - 885E 38 defb 00111000b +1123: - 885F 00 defb 00000000b +1124: +1125: ; code=112, hex=0x70, ascii="p" +1126: - 8860 00 defb 00000000b +1127: - 8861 00 defb 00000000b +1128: - 8862 78 defb 01111000b +1129: - 8863 44 defb 01000100b +1130: - 8864 44 defb 01000100b +1131: - 8865 44 defb 01000100b +1132: - 8866 78 defb 01111000b +1133: - 8867 40 defb 01000000b +1134: +1135: ; code=113, hex=0x71, ascii="q" +1136: - 8868 00 defb 00000000b +1137: - 8869 00 defb 00000000b +1138: - 886A 3C defb 00111100b +1139: - 886B 44 defb 01000100b +1140: - 886C 44 defb 01000100b +1141: - 886D 44 defb 01000100b +1142: - 886E 3C defb 00111100b +1143: - 886F 04 defb 00000100b +1144: +1145: ; code=114, hex=0x72, ascii="r" +1146: - 8870 00 defb 00000000b +1147: - 8871 00 defb 00000000b +1148: - 8872 58 defb 01011000b +1149: - 8873 24 defb 00100100b +1150: - 8874 20 defb 00100000b +1151: - 8875 20 defb 00100000b +1152: - 8876 70 defb 01110000b +1153: - 8877 00 defb 00000000b +1154: +1155: ; code=115, hex=0x73, ascii="s" +1156: - 8878 00 defb 00000000b +1157: - 8879 00 defb 00000000b +1158: - 887A 38 defb 00111000b +1159: - 887B 40 defb 01000000b +1160: - 887C 38 defb 00111000b +1161: - 887D 04 defb 00000100b +1162: - 887E 38 defb 00111000b +1163: - 887F 00 defb 00000000b +1164: +1165: ; code=116, hex=0x74, ascii="t" +1166: - 8880 00 defb 00000000b +1167: - 8881 20 defb 00100000b +1168: - 8882 78 defb 01111000b +1169: - 8883 20 defb 00100000b +1170: - 8884 20 defb 00100000b +1171: - 8885 28 defb 00101000b +1172: - 8886 10 defb 00010000b +1173: - 8887 00 defb 00000000b +1174: +1175: ; code=117, hex=0x75, ascii="u" +1176: - 8888 00 defb 00000000b +1177: - 8889 00 defb 00000000b +1178: - 888A 48 defb 01001000b +1179: - 888B 48 defb 01001000b +1180: - 888C 48 defb 01001000b +1181: - 888D 58 defb 01011000b +1182: - 888E 28 defb 00101000b +1183: - 888F 00 defb 00000000b +1184: +1185: ; code=118, hex=0x76, ascii="v" +1186: - 8890 00 defb 00000000b +1187: - 8891 00 defb 00000000b +1188: - 8892 44 defb 01000100b +1189: - 8893 44 defb 01000100b +1190: - 8894 44 defb 01000100b +1191: - 8895 28 defb 00101000b +1192: - 8896 10 defb 00010000b +1193: - 8897 00 defb 00000000b +1194: +1195: ; code=119, hex=0x77, ascii="w" +1196: - 8898 00 defb 00000000b +1197: - 8899 00 defb 00000000b +1198: - 889A 44 defb 01000100b +1199: - 889B 44 defb 01000100b +1200: - 889C 54 defb 01010100b +1201: - 889D 7C defb 01111100b +1202: - 889E 28 defb 00101000b +1203: - 889F 00 defb 00000000b +1204: +1205: ; code=120, hex=0x78, ascii="x" +1206: - 88A0 00 defb 00000000b +1207: - 88A1 00 defb 00000000b +1208: - 88A2 48 defb 01001000b +1209: - 88A3 48 defb 01001000b +1210: - 88A4 30 defb 00110000b +1211: - 88A5 48 defb 01001000b +1212: - 88A6 48 defb 01001000b +1213: - 88A7 00 defb 00000000b +1214: +1215: ; code=121, hex=0x79, ascii="y" +1216: - 88A8 00 defb 00000000b +1217: - 88A9 00 defb 00000000b +1218: - 88AA 48 defb 01001000b +1219: - 88AB 48 defb 01001000b +1220: - 88AC 48 defb 01001000b +1221: - 88AD 38 defb 00111000b +1222: - 88AE 10 defb 00010000b +1223: - 88AF 60 defb 01100000b +1224: +1225: ; code=122, hex=0x7A, ascii="z" +1226: - 88B0 00 defb 00000000b +1227: - 88B1 00 defb 00000000b +1228: - 88B2 78 defb 01111000b +1229: - 88B3 08 defb 00001000b +1230: - 88B4 30 defb 00110000b +1231: - 88B5 40 defb 01000000b +1232: - 88B6 78 defb 01111000b +1233: - 88B7 00 defb 00000000b +1234: +1235: ; code=123, hex=0x7B, ascii="{" +1236: - 88B8 18 defb 00011000b +1237: - 88B9 20 defb 00100000b +1238: - 88BA 20 defb 00100000b +1239: - 88BB 60 defb 01100000b +1240: - 88BC 20 defb 00100000b +1241: - 88BD 20 defb 00100000b +1242: - 88BE 18 defb 00011000b +1243: - 88BF 00 defb 00000000b +1244: +1245: ; code=124, hex=0x7C, ascii="|" +1246: - 88C0 10 defb 00010000b +1247: - 88C1 10 defb 00010000b +1248: - 88C2 10 defb 00010000b +1249: - 88C3 00 defb 00000000b +1250: - 88C4 10 defb 00010000b +1251: - 88C5 10 defb 00010000b +1252: - 88C6 10 defb 00010000b +1253: - 88C7 00 defb 00000000b +1254: +1255: ; code=125, hex=0x7D, ascii="}" +1256: - 88C8 30 defb 00110000b +1257: - 88C9 08 defb 00001000b +1258: - 88CA 08 defb 00001000b +1259: - 88CB 0C defb 00001100b +1260: - 88CC 08 defb 00001000b +1261: - 88CD 08 defb 00001000b +1262: - 88CE 30 defb 00110000b +1263: - 88CF 00 defb 00000000b +1264: +1265: ; code=126, hex=0x7E, ascii="~" +1266: - 88D0 28 defb 00101000b +1267: - 88D1 50 defb 01010000b +1268: - 88D2 00 defb 00000000b +1269: - 88D3 00 defb 00000000b +1270: - 88D4 00 defb 00000000b +1271: - 88D5 00 defb 00000000b +1272: - 88D6 00 defb 00000000b +1273: - 88D7 00 defb 00000000b +1274: +1275: ; code=127, hex=0x7F, ascii="^?" +1276: - 88D8 10 defb 00010000b +1277: - 88D9 38 defb 00111000b +1278: - 88DA 6C defb 01101100b +1279: - 88DB 44 defb 01000100b +1280: - 88DC 44 defb 01000100b +1281: - 88DD 7C defb 01111100b +1282: - 88DE 00 defb 00000000b +1283: - 88DF 00 defb 00000000b +1284: +1285: ; code=128, hex=0x80, ascii="!^@" +1286: - 88E0 38 defb 00111000b +1287: - 88E1 44 defb 01000100b +1288: - 88E2 40 defb 01000000b +1289: - 88E3 40 defb 01000000b +1290: - 88E4 44 defb 01000100b +1291: - 88E5 38 defb 00111000b +1292: - 88E6 10 defb 00010000b +1293: - 88E7 30 defb 00110000b +1294: +1295: ; code=129, hex=0x81, ascii="!^A" +1296: - 88E8 48 defb 01001000b +1297: - 88E9 00 defb 00000000b +1298: - 88EA 48 defb 01001000b +1299: - 88EB 48 defb 01001000b +1300: - 88EC 48 defb 01001000b +1301: - 88ED 58 defb 01011000b +1302: - 88EE 28 defb 00101000b +1303: - 88EF 00 defb 00000000b +1304: +1305: ; code=130, hex=0x82, ascii="!^B" +1306: - 88F0 0C defb 00001100b +1307: - 88F1 00 defb 00000000b +1308: - 88F2 38 defb 00111000b +1309: - 88F3 44 defb 01000100b +1310: - 88F4 78 defb 01111000b +1311: - 88F5 40 defb 01000000b +1312: - 88F6 38 defb 00111000b +1313: - 88F7 00 defb 00000000b +1314: +1315: ; code=131, hex=0x83, ascii="!^C" +1316: - 88F8 38 defb 00111000b +1317: - 88F9 00 defb 00000000b +1318: - 88FA 38 defb 00111000b +1319: - 88FB 04 defb 00000100b +1320: - 88FC 3C defb 00111100b +1321: - 88FD 44 defb 01000100b +1322: - 88FE 3C defb 00111100b +1323: - 88FF 00 defb 00000000b +1324: +1325: ; code=132, hex=0x84, ascii="!^D" +1326: - 8900 28 defb 00101000b +1327: - 8901 00 defb 00000000b +1328: - 8902 38 defb 00111000b +1329: - 8903 04 defb 00000100b +1330: - 8904 3C defb 00111100b +1331: - 8905 44 defb 01000100b +1332: - 8906 3C defb 00111100b +1333: - 8907 00 defb 00000000b +1334: +1335: ; code=133, hex=0x85, ascii="!^E" +1336: - 8908 30 defb 00110000b +1337: - 8909 00 defb 00000000b +1338: - 890A 38 defb 00111000b +1339: - 890B 04 defb 00000100b +1340: - 890C 3C defb 00111100b +1341: - 890D 44 defb 01000100b +1342: - 890E 3C defb 00111100b +1343: - 890F 00 defb 00000000b +1344: +1345: ; code=134, hex=0x86, ascii="!^F" +1346: - 8910 38 defb 00111000b +1347: - 8911 28 defb 00101000b +1348: - 8912 38 defb 00111000b +1349: - 8913 04 defb 00000100b +1350: - 8914 3C defb 00111100b +1351: - 8915 44 defb 01000100b +1352: - 8916 3C defb 00111100b +1353: - 8917 00 defb 00000000b +1354: +1355: ; code=135, hex=0x87, ascii="!^G" +1356: - 8918 00 defb 00000000b +1357: - 8919 38 defb 00111000b +1358: - 891A 44 defb 01000100b +1359: - 891B 40 defb 01000000b +1360: - 891C 44 defb 01000100b +1361: - 891D 38 defb 00111000b +1362: - 891E 10 defb 00010000b +1363: - 891F 30 defb 00110000b +1364: +1365: ; code=136, hex=0x88, ascii="!^H" +1366: - 8920 38 defb 00111000b +1367: - 8921 00 defb 00000000b +1368: - 8922 38 defb 00111000b +1369: - 8923 44 defb 01000100b +1370: - 8924 78 defb 01111000b +1371: - 8925 40 defb 01000000b +1372: - 8926 38 defb 00111000b +1373: - 8927 00 defb 00000000b +1374: +1375: ; code=137, hex=0x89, ascii="!^I" +1376: - 8928 28 defb 00101000b +1377: - 8929 00 defb 00000000b +1378: - 892A 38 defb 00111000b +1379: - 892B 44 defb 01000100b +1380: - 892C 78 defb 01111000b +1381: - 892D 40 defb 01000000b +1382: - 892E 38 defb 00111000b +1383: - 892F 00 defb 00000000b +1384: +1385: ; code=138, hex=0x8A, ascii="!^J" +1386: - 8930 30 defb 00110000b +1387: - 8931 00 defb 00000000b +1388: - 8932 38 defb 00111000b +1389: - 8933 44 defb 01000100b +1390: - 8934 78 defb 01111000b +1391: - 8935 40 defb 01000000b +1392: - 8936 38 defb 00111000b +1393: - 8937 00 defb 00000000b +1394: +1395: ; code=139, hex=0x8B, ascii="!^K" +1396: - 8938 28 defb 00101000b +1397: - 8939 00 defb 00000000b +1398: - 893A 10 defb 00010000b +1399: - 893B 10 defb 00010000b +1400: - 893C 10 defb 00010000b +1401: - 893D 10 defb 00010000b +1402: - 893E 18 defb 00011000b +1403: - 893F 00 defb 00000000b +1404: +1405: ; code=140, hex=0x8C, ascii="!^L" +1406: - 8940 10 defb 00010000b +1407: - 8941 28 defb 00101000b +1408: - 8942 00 defb 00000000b +1409: - 8943 10 defb 00010000b +1410: - 8944 10 defb 00010000b +1411: - 8945 10 defb 00010000b +1412: - 8946 18 defb 00011000b +1413: - 8947 00 defb 00000000b +1414: +1415: ; code=141, hex=0x8D, ascii="!^M" +1416: - 8948 20 defb 00100000b +1417: - 8949 00 defb 00000000b +1418: - 894A 10 defb 00010000b +1419: - 894B 10 defb 00010000b +1420: - 894C 10 defb 00010000b +1421: - 894D 10 defb 00010000b +1422: - 894E 18 defb 00011000b +1423: - 894F 00 defb 00000000b +1424: +1425: ; code=142, hex=0x8E, ascii="!^N" +1426: - 8950 28 defb 00101000b +1427: - 8951 00 defb 00000000b +1428: - 8952 10 defb 00010000b +1429: - 8953 28 defb 00101000b +1430: - 8954 44 defb 01000100b +1431: - 8955 7C defb 01111100b +1432: - 8956 44 defb 01000100b +1433: - 8957 00 defb 00000000b +1434: +1435: ; code=143, hex=0x8F, ascii="!^O" +1436: - 8958 38 defb 00111000b +1437: - 8959 28 defb 00101000b +1438: - 895A 38 defb 00111000b +1439: - 895B 6C defb 01101100b +1440: - 895C 44 defb 01000100b +1441: - 895D 7C defb 01111100b +1442: - 895E 44 defb 01000100b +1443: - 895F 00 defb 00000000b +1444: +1445: ; code=144, hex=0x90, ascii="!^P" +1446: - 8960 0C defb 00001100b +1447: - 8961 00 defb 00000000b +1448: - 8962 7C defb 01111100b +1449: - 8963 40 defb 01000000b +1450: - 8964 78 defb 01111000b +1451: - 8965 40 defb 01000000b +1452: - 8966 7C defb 01111100b +1453: - 8967 00 defb 00000000b +1454: +1455: ; code=145, hex=0x91, ascii="!^Q" +1456: - 8968 00 defb 00000000b +1457: - 8969 00 defb 00000000b +1458: - 896A 78 defb 01111000b +1459: - 896B 14 defb 00010100b +1460: - 896C 7C defb 01111100b +1461: - 896D 50 defb 01010000b +1462: - 896E 3C defb 00111100b +1463: - 896F 00 defb 00000000b +1464: +1465: ; code=146, hex=0x92, ascii="!^R" +1466: - 8970 3C defb 00111100b +1467: - 8971 50 defb 01010000b +1468: - 8972 50 defb 01010000b +1469: - 8973 7C defb 01111100b +1470: - 8974 50 defb 01010000b +1471: - 8975 50 defb 01010000b +1472: - 8976 5C defb 01011100b +1473: - 8977 00 defb 00000000b +1474: +1475: ; code=147, hex=0x93, ascii="!^S" +1476: - 8978 38 defb 00111000b +1477: - 8979 00 defb 00000000b +1478: - 897A 30 defb 00110000b +1479: - 897B 48 defb 01001000b +1480: - 897C 48 defb 01001000b +1481: - 897D 48 defb 01001000b +1482: - 897E 30 defb 00110000b +1483: - 897F 00 defb 00000000b +1484: +1485: ; code=148, hex=0x94, ascii="!^T" +1486: - 8980 28 defb 00101000b +1487: - 8981 00 defb 00000000b +1488: - 8982 30 defb 00110000b +1489: - 8983 48 defb 01001000b +1490: - 8984 48 defb 01001000b +1491: - 8985 48 defb 01001000b +1492: - 8986 30 defb 00110000b +1493: - 8987 00 defb 00000000b +1494: +1495: ; code=149, hex=0x95, ascii="!^U" +1496: - 8988 60 defb 01100000b +1497: - 8989 00 defb 00000000b +1498: - 898A 30 defb 00110000b +1499: - 898B 48 defb 01001000b +1500: - 898C 48 defb 01001000b +1501: - 898D 48 defb 01001000b +1502: - 898E 30 defb 00110000b +1503: - 898F 00 defb 00000000b +1504: +1505: ; code=150, hex=0x96, ascii="!^V" +1506: - 8990 38 defb 00111000b +1507: - 8991 00 defb 00000000b +1508: - 8992 48 defb 01001000b +1509: - 8993 48 defb 01001000b +1510: - 8994 48 defb 01001000b +1511: - 8995 58 defb 01011000b +1512: - 8996 28 defb 00101000b +1513: - 8997 00 defb 00000000b +1514: +1515: ; code=151, hex=0x97, ascii="!^W" +1516: - 8998 60 defb 01100000b +1517: - 8999 00 defb 00000000b +1518: - 899A 48 defb 01001000b +1519: - 899B 48 defb 01001000b +1520: - 899C 48 defb 01001000b +1521: - 899D 58 defb 01011000b +1522: - 899E 28 defb 00101000b +1523: - 899F 00 defb 00000000b +1524: +1525: ; code=152, hex=0x98, ascii="!^X" +1526: - 89A0 28 defb 00101000b +1527: - 89A1 00 defb 00000000b +1528: - 89A2 48 defb 01001000b +1529: - 89A3 48 defb 01001000b +1530: - 89A4 48 defb 01001000b +1531: - 89A5 38 defb 00111000b +1532: - 89A6 10 defb 00010000b +1533: - 89A7 60 defb 01100000b +1534: +1535: ; code=153, hex=0x99, ascii="!^Y" +1536: - 89A8 48 defb 01001000b +1537: - 89A9 30 defb 00110000b +1538: - 89AA 48 defb 01001000b +1539: - 89AB 48 defb 01001000b +1540: - 89AC 48 defb 01001000b +1541: - 89AD 48 defb 01001000b +1542: - 89AE 30 defb 00110000b +1543: - 89AF 00 defb 00000000b +1544: +1545: ; code=154, hex=0x9A, ascii="!^Z" +1546: - 89B0 28 defb 00101000b +1547: - 89B1 00 defb 00000000b +1548: - 89B2 48 defb 01001000b +1549: - 89B3 48 defb 01001000b +1550: - 89B4 48 defb 01001000b +1551: - 89B5 48 defb 01001000b +1552: - 89B6 30 defb 00110000b +1553: - 89B7 00 defb 00000000b +1554: +1555: ; code=155, hex=0x9B, ascii="!^[" +1556: - 89B8 00 defb 00000000b +1557: - 89B9 10 defb 00010000b +1558: - 89BA 38 defb 00111000b +1559: - 89BB 40 defb 01000000b +1560: - 89BC 40 defb 01000000b +1561: - 89BD 38 defb 00111000b +1562: - 89BE 10 defb 00010000b +1563: - 89BF 00 defb 00000000b +1564: +1565: ; code=156, hex=0x9C, ascii="!^\" +1566: - 89C0 18 defb 00011000b +1567: - 89C1 24 defb 00100100b +1568: - 89C2 20 defb 00100000b +1569: - 89C3 78 defb 01111000b +1570: - 89C4 20 defb 00100000b +1571: - 89C5 24 defb 00100100b +1572: - 89C6 5C defb 01011100b +1573: - 89C7 00 defb 00000000b +1574: +1575: ; code=157, hex=0x9D, ascii="!^]" +1576: - 89C8 44 defb 01000100b +1577: - 89C9 28 defb 00101000b +1578: - 89CA 10 defb 00010000b +1579: - 89CB 7C defb 01111100b +1580: - 89CC 10 defb 00010000b +1581: - 89CD 7C defb 01111100b +1582: - 89CE 10 defb 00010000b +1583: - 89CF 00 defb 00000000b +1584: +1585: ; code=158, hex=0x9E, ascii="!^^" +1586: - 89D0 60 defb 01100000b +1587: - 89D1 50 defb 01010000b +1588: - 89D2 50 defb 01010000b +1589: - 89D3 68 defb 01101000b +1590: - 89D4 5C defb 01011100b +1591: - 89D5 48 defb 01001000b +1592: - 89D6 48 defb 01001000b +1593: - 89D7 00 defb 00000000b +1594: +1595: ; code=159, hex=0x9F, ascii="!^_" +1596: - 89D8 08 defb 00001000b +1597: - 89D9 14 defb 00010100b +1598: - 89DA 10 defb 00010000b +1599: - 89DB 38 defb 00111000b +1600: - 89DC 10 defb 00010000b +1601: - 89DD 10 defb 00010000b +1602: - 89DE 50 defb 01010000b +1603: - 89DF 20 defb 00100000b +1604: +1605: ; code=160, hex=0xA0, ascii="! " +1606: - 89E0 18 defb 00011000b +1607: - 89E1 00 defb 00000000b +1608: - 89E2 38 defb 00111000b +1609: - 89E3 04 defb 00000100b +1610: - 89E4 3C defb 00111100b +1611: - 89E5 44 defb 01000100b +1612: - 89E6 3C defb 00111100b +1613: - 89E7 00 defb 00000000b +1614: +1615: ; code=161, hex=0xA1, ascii="!!" +1616: - 89E8 18 defb 00011000b +1617: - 89E9 00 defb 00000000b +1618: - 89EA 10 defb 00010000b +1619: - 89EB 10 defb 00010000b +1620: - 89EC 10 defb 00010000b +1621: - 89ED 10 defb 00010000b +1622: - 89EE 18 defb 00011000b +1623: - 89EF 00 defb 00000000b +1624: +1625: ; code=162, hex=0xA2, ascii="!"" +1626: - 89F0 18 defb 00011000b +1627: - 89F1 00 defb 00000000b +1628: - 89F2 30 defb 00110000b +1629: - 89F3 48 defb 01001000b +1630: - 89F4 48 defb 01001000b +1631: - 89F5 48 defb 01001000b +1632: - 89F6 30 defb 00110000b +1633: - 89F7 00 defb 00000000b +1634: +1635: ; code=163, hex=0xA3, ascii="!#" +1636: - 89F8 18 defb 00011000b +1637: - 89F9 00 defb 00000000b +1638: - 89FA 48 defb 01001000b +1639: - 89FB 48 defb 01001000b +1640: - 89FC 48 defb 01001000b +1641: - 89FD 58 defb 01011000b +1642: - 89FE 28 defb 00101000b +1643: - 89FF 00 defb 00000000b +1644: +1645: ; code=164, hex=0xA4, ascii="!$" +1646: - 8A00 28 defb 00101000b +1647: - 8A01 50 defb 01010000b +1648: - 8A02 00 defb 00000000b +1649: - 8A03 70 defb 01110000b +1650: - 8A04 48 defb 01001000b +1651: - 8A05 48 defb 01001000b +1652: - 8A06 48 defb 01001000b +1653: - 8A07 00 defb 00000000b +1654: +1655: ; code=165, hex=0xA5, ascii="!" +1656: - 8A08 28 defb 00101000b +1657: - 8A09 50 defb 01010000b +1658: - 8A0A 00 defb 00000000b +1659: - 8A0B 48 defb 01001000b +1660: - 8A0C 68 defb 01101000b +1661: - 8A0D 58 defb 01011000b +1662: - 8A0E 48 defb 01001000b +1663: - 8A0F 00 defb 00000000b +1664: +1665: ; code=166, hex=0xA6, ascii="!&" +1666: - 8A10 38 defb 00111000b +1667: - 8A11 04 defb 00000100b +1668: - 8A12 3C defb 00111100b +1669: - 8A13 44 defb 01000100b +1670: - 8A14 3C defb 00111100b +1671: - 8A15 00 defb 00000000b +1672: - 8A16 3C defb 00111100b +1673: - 8A17 00 defb 00000000b +1674: +1675: ; code=167, hex=0xA7, ascii="!'" +1676: - 8A18 30 defb 00110000b +1677: - 8A19 48 defb 01001000b +1678: - 8A1A 48 defb 01001000b +1679: - 8A1B 48 defb 01001000b +1680: - 8A1C 30 defb 00110000b +1681: - 8A1D 00 defb 00000000b +1682: - 8A1E 78 defb 01111000b +1683: - 8A1F 00 defb 00000000b +1684: +1685: ; code=168, hex=0xA8, ascii="!(" +1686: - 8A20 10 defb 00010000b +1687: - 8A21 00 defb 00000000b +1688: - 8A22 10 defb 00010000b +1689: - 8A23 30 defb 00110000b +1690: - 8A24 40 defb 01000000b +1691: - 8A25 44 defb 01000100b +1692: - 8A26 38 defb 00111000b +1693: - 8A27 00 defb 00000000b +1694: +1695: ; code=169, hex=0xA9, ascii="!)" +1696: - 8A28 00 defb 00000000b +1697: - 8A29 00 defb 00000000b +1698: - 8A2A 7C defb 01111100b +1699: - 8A2B 40 defb 01000000b +1700: - 8A2C 40 defb 01000000b +1701: - 8A2D 40 defb 01000000b +1702: - 8A2E 00 defb 00000000b +1703: - 8A2F 00 defb 00000000b +1704: +1705: ; code=170, hex=0xAA, ascii="!*" +1706: - 8A30 00 defb 00000000b +1707: - 8A31 00 defb 00000000b +1708: - 8A32 FC defb 11111100b +1709: - 8A33 04 defb 00000100b +1710: - 8A34 04 defb 00000100b +1711: - 8A35 00 defb 00000000b +1712: - 8A36 00 defb 00000000b +1713: - 8A37 00 defb 00000000b +1714: +1715: ; code=171, hex=0xAB, ascii="!+" +1716: - 8A38 40 defb 01000000b +1717: - 8A39 48 defb 01001000b +1718: - 8A3A 50 defb 01010000b +1719: - 8A3B 38 defb 00111000b +1720: - 8A3C 44 defb 01000100b +1721: - 8A3D 08 defb 00001000b +1722: - 8A3E 1C defb 00011100b +1723: - 8A3F 00 defb 00000000b +1724: +1725: ; code=172, hex=0xAC, ascii="!," +1726: - 8A40 40 defb 01000000b +1727: - 8A41 48 defb 01001000b +1728: - 8A42 50 defb 01010000b +1729: - 8A43 2C defb 00101100b +1730: - 8A44 54 defb 01010100b +1731: - 8A45 1C defb 00011100b +1732: - 8A46 04 defb 00000100b +1733: - 8A47 00 defb 00000000b +1734: +1735: ; code=173, hex=0xAD, ascii="!-" +1736: - 8A48 10 defb 00010000b +1737: - 8A49 00 defb 00000000b +1738: - 8A4A 10 defb 00010000b +1739: - 8A4B 10 defb 00010000b +1740: - 8A4C 38 defb 00111000b +1741: - 8A4D 38 defb 00111000b +1742: - 8A4E 10 defb 00010000b +1743: - 8A4F 00 defb 00000000b +1744: +1745: ; code=174, hex=0xAE, ascii="!." +1746: - 8A50 00 defb 00000000b +1747: - 8A51 00 defb 00000000b +1748: - 8A52 24 defb 00100100b +1749: - 8A53 48 defb 01001000b +1750: - 8A54 24 defb 00100100b +1751: - 8A55 00 defb 00000000b +1752: - 8A56 00 defb 00000000b +1753: - 8A57 00 defb 00000000b +1754: +1755: ; code=175, hex=0xAF, ascii="!/" +1756: - 8A58 00 defb 00000000b +1757: - 8A59 00 defb 00000000b +1758: - 8A5A 48 defb 01001000b +1759: - 8A5B 24 defb 00100100b +1760: - 8A5C 48 defb 01001000b +1761: - 8A5D 00 defb 00000000b +1762: - 8A5E 00 defb 00000000b +1763: - 8A5F 00 defb 00000000b +1764: +1765: ; code=176, hex=0xB0, ascii="!0" +1766: - 8A60 54 defb 01010100b +1767: - 8A61 00 defb 00000000b +1768: - 8A62 A8 defb 10101000b +1769: - 8A63 00 defb 00000000b +1770: - 8A64 54 defb 01010100b +1771: - 8A65 00 defb 00000000b +1772: - 8A66 A8 defb 10101000b +1773: - 8A67 00 defb 00000000b +1774: +1775: ; code=177, hex=0xB1, ascii="!1" +1776: - 8A68 54 defb 01010100b +1777: - 8A69 A8 defb 10101000b +1778: - 8A6A 54 defb 01010100b +1779: - 8A6B A8 defb 10101000b +1780: - 8A6C 54 defb 01010100b +1781: - 8A6D A8 defb 10101000b +1782: - 8A6E 54 defb 01010100b +1783: - 8A6F A8 defb 10101000b +1784: +1785: ; code=178, hex=0xB2, ascii="!2" +1786: - 8A70 A8 defb 10101000b +1787: - 8A71 FC defb 11111100b +1788: - 8A72 54 defb 01010100b +1789: - 8A73 FC defb 11111100b +1790: - 8A74 A8 defb 10101000b +1791: - 8A75 FC defb 11111100b +1792: - 8A76 54 defb 01010100b +1793: - 8A77 FC defb 11111100b +1794: +1795: ; code=179, hex=0xB3, ascii="!3" +1796: - 8A78 10 defb 00010000b +1797: - 8A79 10 defb 00010000b +1798: - 8A7A 10 defb 00010000b +1799: - 8A7B 10 defb 00010000b +1800: - 8A7C 10 defb 00010000b +1801: - 8A7D 10 defb 00010000b +1802: - 8A7E 10 defb 00010000b +1803: - 8A7F 10 defb 00010000b +1804: +1805: ; code=180, hex=0xB4, ascii="!4" +1806: - 8A80 10 defb 00010000b +1807: - 8A81 10 defb 00010000b +1808: - 8A82 10 defb 00010000b +1809: - 8A83 F0 defb 11110000b +1810: - 8A84 10 defb 00010000b +1811: - 8A85 10 defb 00010000b +1812: - 8A86 10 defb 00010000b +1813: - 8A87 10 defb 00010000b +1814: +1815: ; code=181, hex=0xB5, ascii="!5" +1816: - 8A88 10 defb 00010000b +1817: - 8A89 F0 defb 11110000b +1818: - 8A8A 10 defb 00010000b +1819: - 8A8B F0 defb 11110000b +1820: - 8A8C 10 defb 00010000b +1821: - 8A8D 10 defb 00010000b +1822: - 8A8E 10 defb 00010000b +1823: - 8A8F 10 defb 00010000b +1824: +1825: ; code=182, hex=0xB6, ascii="!6" +1826: - 8A90 50 defb 01010000b +1827: - 8A91 50 defb 01010000b +1828: - 8A92 50 defb 01010000b +1829: - 8A93 D0 defb 11010000b +1830: - 8A94 50 defb 01010000b +1831: - 8A95 50 defb 01010000b +1832: - 8A96 50 defb 01010000b +1833: - 8A97 50 defb 01010000b +1834: +1835: ; code=183, hex=0xB7, ascii="!7" +1836: - 8A98 00 defb 00000000b +1837: - 8A99 00 defb 00000000b +1838: - 8A9A 00 defb 00000000b +1839: - 8A9B F0 defb 11110000b +1840: - 8A9C 50 defb 01010000b +1841: - 8A9D 50 defb 01010000b +1842: - 8A9E 50 defb 01010000b +1843: - 8A9F 50 defb 01010000b +1844: +1845: ; code=184, hex=0xB8, ascii="!8" +1846: - 8AA0 00 defb 00000000b +1847: - 8AA1 F0 defb 11110000b +1848: - 8AA2 10 defb 00010000b +1849: - 8AA3 F0 defb 11110000b +1850: - 8AA4 10 defb 00010000b +1851: - 8AA5 10 defb 00010000b +1852: - 8AA6 10 defb 00010000b +1853: - 8AA7 10 defb 00010000b +1854: +1855: ; code=185, hex=0xB9, ascii="!9" +1856: - 8AA8 50 defb 01010000b +1857: - 8AA9 D0 defb 11010000b +1858: - 8AAA 10 defb 00010000b +1859: - 8AAB D0 defb 11010000b +1860: - 8AAC 50 defb 01010000b +1861: - 8AAD 50 defb 01010000b +1862: - 8AAE 50 defb 01010000b +1863: - 8AAF 50 defb 01010000b +1864: +1865: ; code=186, hex=0xBA, ascii="!:" +1866: - 8AB0 50 defb 01010000b +1867: - 8AB1 50 defb 01010000b +1868: - 8AB2 50 defb 01010000b +1869: - 8AB3 50 defb 01010000b +1870: - 8AB4 50 defb 01010000b +1871: - 8AB5 50 defb 01010000b +1872: - 8AB6 50 defb 01010000b +1873: - 8AB7 50 defb 01010000b +1874: +1875: ; code=187, hex=0xBB, ascii="!;" +1876: - 8AB8 00 defb 00000000b +1877: - 8AB9 F0 defb 11110000b +1878: - 8ABA 10 defb 00010000b +1879: - 8ABB D0 defb 11010000b +1880: - 8ABC 50 defb 01010000b +1881: - 8ABD 50 defb 01010000b +1882: - 8ABE 50 defb 01010000b +1883: - 8ABF 50 defb 01010000b +1884: +1885: ; code=188, hex=0xBC, ascii="!<" +1886: - 8AC0 50 defb 01010000b +1887: - 8AC1 D0 defb 11010000b +1888: - 8AC2 10 defb 00010000b +1889: - 8AC3 F0 defb 11110000b +1890: - 8AC4 00 defb 00000000b +1891: - 8AC5 00 defb 00000000b +1892: - 8AC6 00 defb 00000000b +1893: - 8AC7 00 defb 00000000b +1894: +1895: ; code=189, hex=0xBD, ascii="!=" +1896: - 8AC8 50 defb 01010000b +1897: - 8AC9 50 defb 01010000b +1898: - 8ACA 50 defb 01010000b +1899: - 8ACB F0 defb 11110000b +1900: - 8ACC 00 defb 00000000b +1901: - 8ACD 00 defb 00000000b +1902: - 8ACE 00 defb 00000000b +1903: - 8ACF 00 defb 00000000b +1904: +1905: ; code=190, hex=0xBE, ascii="!>" +1906: - 8AD0 10 defb 00010000b +1907: - 8AD1 F0 defb 11110000b +1908: - 8AD2 10 defb 00010000b +1909: - 8AD3 F0 defb 11110000b +1910: - 8AD4 00 defb 00000000b +1911: - 8AD5 00 defb 00000000b +1912: - 8AD6 00 defb 00000000b +1913: - 8AD7 00 defb 00000000b +1914: +1915: ; code=191, hex=0xBF, ascii="!?" +1916: - 8AD8 00 defb 00000000b +1917: - 8AD9 00 defb 00000000b +1918: - 8ADA 00 defb 00000000b +1919: - 8ADB F0 defb 11110000b +1920: - 8ADC 10 defb 00010000b +1921: - 8ADD 10 defb 00010000b +1922: - 8ADE 10 defb 00010000b +1923: - 8ADF 10 defb 00010000b +1924: +1925: ; code=192, hex=0xC0, ascii="!@" +1926: - 8AE0 10 defb 00010000b +1927: - 8AE1 10 defb 00010000b +1928: - 8AE2 10 defb 00010000b +1929: - 8AE3 1C defb 00011100b +1930: - 8AE4 00 defb 00000000b +1931: - 8AE5 00 defb 00000000b +1932: - 8AE6 00 defb 00000000b +1933: - 8AE7 00 defb 00000000b +1934: +1935: ; code=193, hex=0xC1, ascii="!A" +1936: - 8AE8 10 defb 00010000b +1937: - 8AE9 10 defb 00010000b +1938: - 8AEA 10 defb 00010000b +1939: - 8AEB FC defb 11111100b +1940: - 8AEC 00 defb 00000000b +1941: - 8AED 00 defb 00000000b +1942: - 8AEE 00 defb 00000000b +1943: - 8AEF 00 defb 00000000b +1944: +1945: ; code=194, hex=0xC2, ascii="!B" +1946: - 8AF0 00 defb 00000000b +1947: - 8AF1 00 defb 00000000b +1948: - 8AF2 00 defb 00000000b +1949: - 8AF3 FC defb 11111100b +1950: - 8AF4 10 defb 00010000b +1951: - 8AF5 10 defb 00010000b +1952: - 8AF6 10 defb 00010000b +1953: - 8AF7 10 defb 00010000b +1954: +1955: ; code=195, hex=0xC3, ascii="!C" +1956: - 8AF8 10 defb 00010000b +1957: - 8AF9 10 defb 00010000b +1958: - 8AFA 10 defb 00010000b +1959: - 8AFB 1C defb 00011100b +1960: - 8AFC 10 defb 00010000b +1961: - 8AFD 10 defb 00010000b +1962: - 8AFE 10 defb 00010000b +1963: - 8AFF 10 defb 00010000b +1964: +1965: ; code=196, hex=0xC4, ascii="!D" +1966: - 8B00 00 defb 00000000b +1967: - 8B01 00 defb 00000000b +1968: - 8B02 00 defb 00000000b +1969: - 8B03 FC defb 11111100b +1970: - 8B04 00 defb 00000000b +1971: - 8B05 00 defb 00000000b +1972: - 8B06 00 defb 00000000b +1973: - 8B07 00 defb 00000000b +1974: +1975: ; code=197, hex=0xC5, ascii="!E" +1976: - 8B08 10 defb 00010000b +1977: - 8B09 10 defb 00010000b +1978: - 8B0A 10 defb 00010000b +1979: - 8B0B FC defb 11111100b +1980: - 8B0C 10 defb 00010000b +1981: - 8B0D 10 defb 00010000b +1982: - 8B0E 10 defb 00010000b +1983: - 8B0F 10 defb 00010000b +1984: +1985: ; code=198, hex=0xC6, ascii="!F" +1986: - 8B10 10 defb 00010000b +1987: - 8B11 1C defb 00011100b +1988: - 8B12 10 defb 00010000b +1989: - 8B13 1C defb 00011100b +1990: - 8B14 10 defb 00010000b +1991: - 8B15 10 defb 00010000b +1992: - 8B16 10 defb 00010000b +1993: - 8B17 10 defb 00010000b +1994: +1995: ; code=199, hex=0xC7, ascii="!G" +1996: - 8B18 50 defb 01010000b +1997: - 8B19 50 defb 01010000b +1998: - 8B1A 50 defb 01010000b +1999: - 8B1B 5C defb 01011100b +2000: - 8B1C 50 defb 01010000b +2001: - 8B1D 50 defb 01010000b +2002: - 8B1E 50 defb 01010000b +2003: - 8B1F 50 defb 01010000b +2004: +2005: ; code=200, hex=0xC8, ascii="!H" +2006: - 8B20 50 defb 01010000b +2007: - 8B21 5C defb 01011100b +2008: - 8B22 40 defb 01000000b +2009: - 8B23 7C defb 01111100b +2010: - 8B24 00 defb 00000000b +2011: - 8B25 00 defb 00000000b +2012: - 8B26 00 defb 00000000b +2013: - 8B27 00 defb 00000000b +2014: +2015: ; code=201, hex=0xC9, ascii="!I" +2016: - 8B28 00 defb 00000000b +2017: - 8B29 7C defb 01111100b +2018: - 8B2A 40 defb 01000000b +2019: - 8B2B 5C defb 01011100b +2020: - 8B2C 50 defb 01010000b +2021: - 8B2D 50 defb 01010000b +2022: - 8B2E 50 defb 01010000b +2023: - 8B2F 50 defb 01010000b +2024: +2025: ; code=202, hex=0xCA, ascii="!J" +2026: - 8B30 50 defb 01010000b +2027: - 8B31 DC defb 11011100b +2028: - 8B32 00 defb 00000000b +2029: - 8B33 FC defb 11111100b +2030: - 8B34 00 defb 00000000b +2031: - 8B35 00 defb 00000000b +2032: - 8B36 00 defb 00000000b +2033: - 8B37 00 defb 00000000b +2034: +2035: ; code=203, hex=0xCB, ascii="!K" +2036: - 8B38 00 defb 00000000b +2037: - 8B39 FC defb 11111100b +2038: - 8B3A 00 defb 00000000b +2039: - 8B3B DC defb 11011100b +2040: - 8B3C 50 defb 01010000b +2041: - 8B3D 50 defb 01010000b +2042: - 8B3E 50 defb 01010000b +2043: - 8B3F 50 defb 01010000b +2044: +2045: ; code=204, hex=0xCC, ascii="!L" +2046: - 8B40 50 defb 01010000b +2047: - 8B41 5C defb 01011100b +2048: - 8B42 40 defb 01000000b +2049: - 8B43 5C defb 01011100b +2050: - 8B44 50 defb 01010000b +2051: - 8B45 50 defb 01010000b +2052: - 8B46 50 defb 01010000b +2053: - 8B47 50 defb 01010000b +2054: +2055: ; code=205, hex=0xCD, ascii="!M" +2056: - 8B48 00 defb 00000000b +2057: - 8B49 FC defb 11111100b +2058: - 8B4A 00 defb 00000000b +2059: - 8B4B FC defb 11111100b +2060: - 8B4C 00 defb 00000000b +2061: - 8B4D 00 defb 00000000b +2062: - 8B4E 00 defb 00000000b +2063: - 8B4F 00 defb 00000000b +2064: +2065: ; code=206, hex=0xCE, ascii="!N" +2066: - 8B50 50 defb 01010000b +2067: - 8B51 DC defb 11011100b +2068: - 8B52 00 defb 00000000b +2069: - 8B53 DC defb 11011100b +2070: - 8B54 50 defb 01010000b +2071: - 8B55 50 defb 01010000b +2072: - 8B56 50 defb 01010000b +2073: - 8B57 50 defb 01010000b +2074: +2075: ; code=207, hex=0xCF, ascii="!O" +2076: - 8B58 10 defb 00010000b +2077: - 8B59 FC defb 11111100b +2078: - 8B5A 00 defb 00000000b +2079: - 8B5B FC defb 11111100b +2080: - 8B5C 00 defb 00000000b +2081: - 8B5D 00 defb 00000000b +2082: - 8B5E 00 defb 00000000b +2083: - 8B5F 00 defb 00000000b +2084: +2085: ; code=208, hex=0xD0, ascii="!P" +2086: - 8B60 50 defb 01010000b +2087: - 8B61 50 defb 01010000b +2088: - 8B62 50 defb 01010000b +2089: - 8B63 FC defb 11111100b +2090: - 8B64 00 defb 00000000b +2091: - 8B65 00 defb 00000000b +2092: - 8B66 00 defb 00000000b +2093: - 8B67 00 defb 00000000b +2094: +2095: ; code=209, hex=0xD1, ascii="!Q" +2096: - 8B68 00 defb 00000000b +2097: - 8B69 FC defb 11111100b +2098: - 8B6A 00 defb 00000000b +2099: - 8B6B FC defb 11111100b +2100: - 8B6C 10 defb 00010000b +2101: - 8B6D 10 defb 00010000b +2102: - 8B6E 10 defb 00010000b +2103: - 8B6F 10 defb 00010000b +2104: +2105: ; code=210, hex=0xD2, ascii="!R" +2106: - 8B70 00 defb 00000000b +2107: - 8B71 00 defb 00000000b +2108: - 8B72 00 defb 00000000b +2109: - 8B73 FC defb 11111100b +2110: - 8B74 50 defb 01010000b +2111: - 8B75 50 defb 01010000b +2112: - 8B76 50 defb 01010000b +2113: - 8B77 50 defb 01010000b +2114: +2115: ; code=211, hex=0xD3, ascii="!S" +2116: - 8B78 50 defb 01010000b +2117: - 8B79 50 defb 01010000b +2118: - 8B7A 50 defb 01010000b +2119: - 8B7B 7C defb 01111100b +2120: - 8B7C 00 defb 00000000b +2121: - 8B7D 00 defb 00000000b +2122: - 8B7E 00 defb 00000000b +2123: - 8B7F 00 defb 00000000b +2124: +2125: ; code=212, hex=0xD4, ascii="!T" +2126: - 8B80 10 defb 00010000b +2127: - 8B81 1C defb 00011100b +2128: - 8B82 10 defb 00010000b +2129: - 8B83 1C defb 00011100b +2130: - 8B84 00 defb 00000000b +2131: - 8B85 00 defb 00000000b +2132: - 8B86 00 defb 00000000b +2133: - 8B87 00 defb 00000000b +2134: +2135: ; code=213, hex=0xD5, ascii="!U" +2136: - 8B88 00 defb 00000000b +2137: - 8B89 1C defb 00011100b +2138: - 8B8A 10 defb 00010000b +2139: - 8B8B 1C defb 00011100b +2140: - 8B8C 10 defb 00010000b +2141: - 8B8D 10 defb 00010000b +2142: - 8B8E 10 defb 00010000b +2143: - 8B8F 10 defb 00010000b +2144: +2145: ; code=214, hex=0xD6, ascii="!V" +2146: - 8B90 00 defb 00000000b +2147: - 8B91 00 defb 00000000b +2148: - 8B92 00 defb 00000000b +2149: - 8B93 7C defb 01111100b +2150: - 8B94 50 defb 01010000b +2151: - 8B95 50 defb 01010000b +2152: - 8B96 50 defb 01010000b +2153: - 8B97 50 defb 01010000b +2154: +2155: ; code=215, hex=0xD7, ascii="!W" +2156: - 8B98 50 defb 01010000b +2157: - 8B99 50 defb 01010000b +2158: - 8B9A 50 defb 01010000b +2159: - 8B9B DC defb 11011100b +2160: - 8B9C 50 defb 01010000b +2161: - 8B9D 50 defb 01010000b +2162: - 8B9E 50 defb 01010000b +2163: - 8B9F 50 defb 01010000b +2164: +2165: ; code=216, hex=0xD8, ascii="!X" +2166: - 8BA0 10 defb 00010000b +2167: - 8BA1 FC defb 11111100b +2168: - 8BA2 00 defb 00000000b +2169: - 8BA3 FC defb 11111100b +2170: - 8BA4 10 defb 00010000b +2171: - 8BA5 10 defb 00010000b +2172: - 8BA6 10 defb 00010000b +2173: - 8BA7 10 defb 00010000b +2174: +2175: ; code=217, hex=0xD9, ascii="!Y" +2176: - 8BA8 10 defb 00010000b +2177: - 8BA9 10 defb 00010000b +2178: - 8BAA 10 defb 00010000b +2179: - 8BAB F0 defb 11110000b +2180: - 8BAC 00 defb 00000000b +2181: - 8BAD 00 defb 00000000b +2182: - 8BAE 00 defb 00000000b +2183: - 8BAF 00 defb 00000000b +2184: +2185: ; code=218, hex=0xDA, ascii="!Z" +2186: - 8BB0 00 defb 00000000b +2187: - 8BB1 00 defb 00000000b +2188: - 8BB2 00 defb 00000000b +2189: - 8BB3 1C defb 00011100b +2190: - 8BB4 10 defb 00010000b +2191: - 8BB5 10 defb 00010000b +2192: - 8BB6 10 defb 00010000b +2193: - 8BB7 10 defb 00010000b +2194: +2195: ; code=219, hex=0xDB, ascii="![" +2196: - 8BB8 FC defb 11111100b +2197: - 8BB9 FC defb 11111100b +2198: - 8BBA FC defb 11111100b +2199: - 8BBB FC defb 11111100b +2200: - 8BBC FC defb 11111100b +2201: - 8BBD FC defb 11111100b +2202: - 8BBE FC defb 11111100b +2203: - 8BBF FC defb 11111100b +2204: +2205: ; code=220, hex=0xDC, ascii="!\" +2206: - 8BC0 00 defb 00000000b +2207: - 8BC1 00 defb 00000000b +2208: - 8BC2 00 defb 00000000b +2209: - 8BC3 00 defb 00000000b +2210: - 8BC4 FC defb 11111100b +2211: - 8BC5 FC defb 11111100b +2212: - 8BC6 FC defb 11111100b +2213: - 8BC7 FC defb 11111100b +2214: +2215: ; code=221, hex=0xDD, ascii="!]" +2216: - 8BC8 E0 defb 11100000b +2217: - 8BC9 E0 defb 11100000b +2218: - 8BCA E0 defb 11100000b +2219: - 8BCB E0 defb 11100000b +2220: - 8BCC E0 defb 11100000b +2221: - 8BCD E0 defb 11100000b +2222: - 8BCE E0 defb 11100000b +2223: - 8BCF E0 defb 11100000b +2224: +2225: ; code=222, hex=0xDE, ascii="!^" +2226: - 8BD0 1C defb 00011100b +2227: - 8BD1 1C defb 00011100b +2228: - 8BD2 1C defb 00011100b +2229: - 8BD3 1C defb 00011100b +2230: - 8BD4 1C defb 00011100b +2231: - 8BD5 1C defb 00011100b +2232: - 8BD6 1C defb 00011100b +2233: - 8BD7 1C defb 00011100b +2234: +2235: ; code=223, hex=0xDF, ascii="!_" +2236: - 8BD8 FC defb 11111100b +2237: - 8BD9 FC defb 11111100b +2238: - 8BDA FC defb 11111100b +2239: - 8BDB FC defb 11111100b +2240: - 8BDC 00 defb 00000000b +2241: - 8BDD 00 defb 00000000b +2242: - 8BDE 00 defb 00000000b +2243: - 8BDF 00 defb 00000000b +2244: +2245: ; code=224, hex=0xE0, ascii="!`" +2246: - 8BE0 00 defb 00000000b +2247: - 8BE1 00 defb 00000000b +2248: - 8BE2 34 defb 00110100b +2249: - 8BE3 48 defb 01001000b +2250: - 8BE4 48 defb 01001000b +2251: - 8BE5 34 defb 00110100b +2252: - 8BE6 00 defb 00000000b +2253: - 8BE7 00 defb 00000000b +2254: +2255: ; code=225, hex=0xE1, ascii="!a" +2256: - 8BE8 00 defb 00000000b +2257: - 8BE9 70 defb 01110000b +2258: - 8BEA 48 defb 01001000b +2259: - 8BEB 70 defb 01110000b +2260: - 8BEC 48 defb 01001000b +2261: - 8BED 48 defb 01001000b +2262: - 8BEE 70 defb 01110000b +2263: - 8BEF 40 defb 01000000b +2264: +2265: ; code=226, hex=0xE2, ascii="!b" +2266: - 8BF0 78 defb 01111000b +2267: - 8BF1 48 defb 01001000b +2268: - 8BF2 40 defb 01000000b +2269: - 8BF3 40 defb 01000000b +2270: - 8BF4 40 defb 01000000b +2271: - 8BF5 40 defb 01000000b +2272: - 8BF6 40 defb 01000000b +2273: - 8BF7 00 defb 00000000b +2274: +2275: ; code=227, hex=0xE3, ascii="!c" +2276: - 8BF8 00 defb 00000000b +2277: - 8BF9 7C defb 01111100b +2278: - 8BFA 28 defb 00101000b +2279: - 8BFB 28 defb 00101000b +2280: - 8BFC 28 defb 00101000b +2281: - 8BFD 28 defb 00101000b +2282: - 8BFE 28 defb 00101000b +2283: - 8BFF 00 defb 00000000b +2284: +2285: ; code=228, hex=0xE4, ascii="!d" +2286: - 8C00 78 defb 01111000b +2287: - 8C01 48 defb 01001000b +2288: - 8C02 20 defb 00100000b +2289: - 8C03 10 defb 00010000b +2290: - 8C04 20 defb 00100000b +2291: - 8C05 48 defb 01001000b +2292: - 8C06 78 defb 01111000b +2293: - 8C07 00 defb 00000000b +2294: +2295: ; code=229, hex=0xE5, ascii="!e" +2296: - 8C08 00 defb 00000000b +2297: - 8C09 00 defb 00000000b +2298: - 8C0A 3C defb 00111100b +2299: - 8C0B 48 defb 01001000b +2300: - 8C0C 48 defb 01001000b +2301: - 8C0D 30 defb 00110000b +2302: - 8C0E 00 defb 00000000b +2303: - 8C0F 00 defb 00000000b +2304: +2305: ; code=230, hex=0xE6, ascii="!f" +2306: - 8C10 00 defb 00000000b +2307: - 8C11 00 defb 00000000b +2308: - 8C12 48 defb 01001000b +2309: - 8C13 48 defb 01001000b +2310: - 8C14 48 defb 01001000b +2311: - 8C15 70 defb 01110000b +2312: - 8C16 40 defb 01000000b +2313: - 8C17 40 defb 01000000b +2314: +2315: ; code=231, hex=0xE7, ascii="!g" +2316: - 8C18 00 defb 00000000b +2317: - 8C19 00 defb 00000000b +2318: - 8C1A 28 defb 00101000b +2319: - 8C1B 50 defb 01010000b +2320: - 8C1C 10 defb 00010000b +2321: - 8C1D 10 defb 00010000b +2322: - 8C1E 10 defb 00010000b +2323: - 8C1F 00 defb 00000000b +2324: +2325: ; code=232, hex=0xE8, ascii="!h" +2326: - 8C20 38 defb 00111000b +2327: - 8C21 10 defb 00010000b +2328: - 8C22 38 defb 00111000b +2329: - 8C23 44 defb 01000100b +2330: - 8C24 38 defb 00111000b +2331: - 8C25 10 defb 00010000b +2332: - 8C26 38 defb 00111000b +2333: - 8C27 00 defb 00000000b +2334: +2335: ; code=233, hex=0xE9, ascii="!i" +2336: - 8C28 30 defb 00110000b +2337: - 8C29 48 defb 01001000b +2338: - 8C2A 48 defb 01001000b +2339: - 8C2B 78 defb 01111000b +2340: - 8C2C 48 defb 01001000b +2341: - 8C2D 48 defb 01001000b +2342: - 8C2E 30 defb 00110000b +2343: - 8C2F 00 defb 00000000b +2344: +2345: ; code=234, hex=0xEA, ascii="!j" +2346: - 8C30 00 defb 00000000b +2347: - 8C31 38 defb 00111000b +2348: - 8C32 44 defb 01000100b +2349: - 8C33 44 defb 01000100b +2350: - 8C34 28 defb 00101000b +2351: - 8C35 28 defb 00101000b +2352: - 8C36 6C defb 01101100b +2353: - 8C37 00 defb 00000000b +2354: +2355: ; code=235, hex=0xEB, ascii="!k" +2356: - 8C38 30 defb 00110000b +2357: - 8C39 40 defb 01000000b +2358: - 8C3A 20 defb 00100000b +2359: - 8C3B 10 defb 00010000b +2360: - 8C3C 38 defb 00111000b +2361: - 8C3D 48 defb 01001000b +2362: - 8C3E 30 defb 00110000b +2363: - 8C3F 00 defb 00000000b +2364: +2365: ; code=236, hex=0xEC, ascii="!l" +2366: - 8C40 00 defb 00000000b +2367: - 8C41 00 defb 00000000b +2368: - 8C42 28 defb 00101000b +2369: - 8C43 54 defb 01010100b +2370: - 8C44 54 defb 01010100b +2371: - 8C45 28 defb 00101000b +2372: - 8C46 00 defb 00000000b +2373: - 8C47 00 defb 00000000b +2374: +2375: ; code=237, hex=0xED, ascii="!m" +2376: - 8C48 00 defb 00000000b +2377: - 8C49 10 defb 00010000b +2378: - 8C4A 38 defb 00111000b +2379: - 8C4B 54 defb 01010100b +2380: - 8C4C 54 defb 01010100b +2381: - 8C4D 38 defb 00111000b +2382: - 8C4E 10 defb 00010000b +2383: - 8C4F 00 defb 00000000b +2384: +2385: ; code=238, hex=0xEE, ascii="!n" +2386: - 8C50 00 defb 00000000b +2387: - 8C51 38 defb 00111000b +2388: - 8C52 40 defb 01000000b +2389: - 8C53 78 defb 01111000b +2390: - 8C54 40 defb 01000000b +2391: - 8C55 38 defb 00111000b +2392: - 8C56 00 defb 00000000b +2393: - 8C57 00 defb 00000000b +2394: +2395: ; code=239, hex=0xEF, ascii="!o" +2396: - 8C58 00 defb 00000000b +2397: - 8C59 30 defb 00110000b +2398: - 8C5A 48 defb 01001000b +2399: - 8C5B 48 defb 01001000b +2400: - 8C5C 48 defb 01001000b +2401: - 8C5D 48 defb 01001000b +2402: - 8C5E 00 defb 00000000b +2403: - 8C5F 00 defb 00000000b +2404: +2405: ; code=240, hex=0xF0, ascii="!p" +2406: - 8C60 00 defb 00000000b +2407: - 8C61 78 defb 01111000b +2408: - 8C62 00 defb 00000000b +2409: - 8C63 78 defb 01111000b +2410: - 8C64 00 defb 00000000b +2411: - 8C65 78 defb 01111000b +2412: - 8C66 00 defb 00000000b +2413: - 8C67 00 defb 00000000b +2414: +2415: ; code=241, hex=0xF1, ascii="!q" +2416: - 8C68 00 defb 00000000b +2417: - 8C69 10 defb 00010000b +2418: - 8C6A 38 defb 00111000b +2419: - 8C6B 10 defb 00010000b +2420: - 8C6C 00 defb 00000000b +2421: - 8C6D 38 defb 00111000b +2422: - 8C6E 00 defb 00000000b +2423: - 8C6F 00 defb 00000000b +2424: +2425: ; code=242, hex=0xF2, ascii="!r" +2426: - 8C70 40 defb 01000000b +2427: - 8C71 30 defb 00110000b +2428: - 8C72 08 defb 00001000b +2429: - 8C73 30 defb 00110000b +2430: - 8C74 40 defb 01000000b +2431: - 8C75 00 defb 00000000b +2432: - 8C76 78 defb 01111000b +2433: - 8C77 00 defb 00000000b +2434: +2435: ; code=243, hex=0xF3, ascii="!s" +2436: - 8C78 08 defb 00001000b +2437: - 8C79 30 defb 00110000b +2438: - 8C7A 40 defb 01000000b +2439: - 8C7B 30 defb 00110000b +2440: - 8C7C 08 defb 00001000b +2441: - 8C7D 00 defb 00000000b +2442: - 8C7E 78 defb 01111000b +2443: - 8C7F 00 defb 00000000b +2444: +2445: ; code=244, hex=0xF4, ascii="!t" +2446: - 8C80 00 defb 00000000b +2447: - 8C81 08 defb 00001000b +2448: - 8C82 14 defb 00010100b +2449: - 8C83 10 defb 00010000b +2450: - 8C84 10 defb 00010000b +2451: - 8C85 10 defb 00010000b +2452: - 8C86 10 defb 00010000b +2453: - 8C87 10 defb 00010000b +2454: +2455: ; code=245, hex=0xF5, ascii="!u" +2456: - 8C88 10 defb 00010000b +2457: - 8C89 10 defb 00010000b +2458: - 8C8A 10 defb 00010000b +2459: - 8C8B 10 defb 00010000b +2460: - 8C8C 10 defb 00010000b +2461: - 8C8D 50 defb 01010000b +2462: - 8C8E 20 defb 00100000b +2463: - 8C8F 00 defb 00000000b +2464: +2465: ; code=246, hex=0xF6, ascii="!v" +2466: - 8C90 00 defb 00000000b +2467: - 8C91 10 defb 00010000b +2468: - 8C92 00 defb 00000000b +2469: - 8C93 7C defb 01111100b +2470: - 8C94 00 defb 00000000b +2471: - 8C95 10 defb 00010000b +2472: - 8C96 00 defb 00000000b +2473: - 8C97 00 defb 00000000b +2474: +2475: ; code=247, hex=0xF7, ascii="!w" +2476: - 8C98 00 defb 00000000b +2477: - 8C99 28 defb 00101000b +2478: - 8C9A 50 defb 01010000b +2479: - 8C9B 00 defb 00000000b +2480: - 8C9C 28 defb 00101000b +2481: - 8C9D 50 defb 01010000b +2482: - 8C9E 00 defb 00000000b +2483: - 8C9F 00 defb 00000000b +2484: +2485: ; code=248, hex=0xF8, ascii="!x" +2486: - 8CA0 30 defb 00110000b +2487: - 8CA1 48 defb 01001000b +2488: - 8CA2 48 defb 01001000b +2489: - 8CA3 30 defb 00110000b +2490: - 8CA4 00 defb 00000000b +2491: - 8CA5 00 defb 00000000b +2492: - 8CA6 00 defb 00000000b +2493: - 8CA7 00 defb 00000000b +2494: +2495: ; code=249, hex=0xF9, ascii="!y" +2496: - 8CA8 00 defb 00000000b +2497: - 8CA9 00 defb 00000000b +2498: - 8CAA 00 defb 00000000b +2499: - 8CAB 30 defb 00110000b +2500: - 8CAC 30 defb 00110000b +2501: - 8CAD 00 defb 00000000b +2502: - 8CAE 00 defb 00000000b +2503: - 8CAF 00 defb 00000000b +2504: +2505: ; code=250, hex=0xFA, ascii="!z" +2506: - 8CB0 00 defb 00000000b +2507: - 8CB1 00 defb 00000000b +2508: - 8CB2 00 defb 00000000b +2509: - 8CB3 20 defb 00100000b +2510: - 8CB4 00 defb 00000000b +2511: - 8CB5 00 defb 00000000b +2512: - 8CB6 00 defb 00000000b +2513: - 8CB7 00 defb 00000000b +2514: +2515: ; code=251, hex=0xFB, ascii="!{" +2516: - 8CB8 00 defb 00000000b +2517: - 8CB9 1C defb 00011100b +2518: - 8CBA 10 defb 00010000b +2519: - 8CBB 10 defb 00010000b +2520: - 8CBC 50 defb 01010000b +2521: - 8CBD 50 defb 01010000b +2522: - 8CBE 20 defb 00100000b +2523: - 8CBF 00 defb 00000000b +2524: +2525: ; code=252, hex=0xFC, ascii="!|" +2526: - 8CC0 50 defb 01010000b +2527: - 8CC1 28 defb 00101000b +2528: - 8CC2 28 defb 00101000b +2529: - 8CC3 28 defb 00101000b +2530: - 8CC4 00 defb 00000000b +2531: - 8CC5 00 defb 00000000b +2532: - 8CC6 00 defb 00000000b +2533: - 8CC7 00 defb 00000000b +2534: +2535: ; code=253, hex=0xFD, ascii="!}" +2536: - 8CC8 60 defb 01100000b +2537: - 8CC9 10 defb 00010000b +2538: - 8CCA 20 defb 00100000b +2539: - 8CCB 70 defb 01110000b +2540: - 8CCC 00 defb 00000000b +2541: - 8CCD 00 defb 00000000b +2542: - 8CCE 00 defb 00000000b +2543: - 8CCF 00 defb 00000000b +2544: +2545: ; code=254, hex=0xFE, ascii="!~" +2546: - 8CD0 00 defb 00000000b +2547: - 8CD1 00 defb 00000000b +2548: - 8CD2 78 defb 01111000b +2549: - 8CD3 78 defb 01111000b +2550: - 8CD4 78 defb 01111000b +2551: - 8CD5 78 defb 01111000b +2552: - 8CD6 00 defb 00000000b +2553: - 8CD7 00 defb 00000000b +2554: +2555: ; code=255, hex=0xFF, ascii="!^Ÿ" +2556: - 8CD8 00 defb 00000000b +2557: - 8CD9 00 defb 00000000b +2558: - 8CDA 00 defb 00000000b +2559: - 8CDB 00 defb 00000000b +2560: - 8CDC 00 defb 00000000b +2561: - 8CDD 00 defb 00000000b +2562: - 8CDE 00 defb 00000000b **** test.asm **** - 56: 1718+10 8130 C9 RET + 276: - 8CDF 00 defb 00000000b + 277: + 278: + 279: - 8CE0 TermClear: + 280: 5169+10 8CE0 010038 ld bc, 0x3800 + 281: - 8CE3 TermClearLoop: + 282: 5179+4 8CE3 79 ld a,c ; setup VDP addressh + 283: 5183+11 8CE4 D381 out (0x81),a + 284: 5194+4 8CE6 78 ld a,b + 285: 5198+7 8CE7 E63F and 3fh + 286: 5205+7 8CE9 F640 or 40h ; write bit + 287: 5212+11 8CEB D381 out (0x81),a + 288: 5223+7 8CED 3E20 ld a, ' ' + 289: 5230+11 8CEF D380 out (0x80),a + 290: 5241+17 8CF1 CD6481 call VDPWait + 291: 5258+6 8CF4 03 inc bc + 292: + 293: 5264+4 8CF5 60 ld h,b + 294: 5268+4 8CF6 69 ld l,c + 295: 5272+10 8CF7 11C03B ld de, 0x3800 + 960 ; buffer end + 296: 5282+15 8CFA ED52 sbc hl, de + 297: 5297+10 8CFC C2E38C jp nz, TermClearLoop + 298: + 299: 5307+4 8CFF AF xor a + 300: 5311+13 8D00 32E040 ld (TermCurrentX), a + 301: 5324+13 8D03 32E140 ld (TermCurrentY), a + 302: + 303: 5337+17 8D06 CD4480 call TermSetCursor + 304: +**** test.asm **** + 305: 5354+10 8D09 C9 ret @@ -729,39 +4051,43 @@ Statistics: 4 passes 0 jr promotions - 416 symbols - 305 bytes + 577 symbols + 3338 bytes Symbol Table: -AY0_WRITE_REG =91 145 -A_RTS_OFF = 312 786 -A_RTS_ON = 31B 795 -CMD_DASM = 239 569 -CMD_EXEC = 12F 303 -CMD_IO_READ = 21D 541 -CMD_IO_WRITE = 1F4 500 -CMD_SET = 1B8 440 -CMD_SET_END = 1EE 494 -CMD_SET_LOOP = 1D3 467 -CMD_SYNTAX_ERROR= 272 626 -CMD_VIEW = 14E 334 -CMD_VIEW_END = 1B2 434 -CMD_VIEW_ROW = 187 391 -CMD_VIEW_ROW_LOOP= 199 409 -CONSOLE_INIT = 27E 638 -CONSOLE_INIT_CTC= 27E 638 -CONSOLE_INIT_SIO= 286 646 +ADDR_RTC =D0 208 +A_RTS_OFF = 14F 335 +A_RTS_ON = 158 344 +BOOT_PHASE0 =50 80 +BOOT_PHASE1 =6E 110 +BOOT_PHASE1_LOOP=77 119 +BOOT_PHASE2 =82 130 +COMMAND =11CD 4557 +COMMAND_BACKSPACE=1208 4616 +COMMAND_LUT =1166 4454 +COMMAND_PROCESS=122E 4654 +COMMAND_PROCESS_FOUND=1269 4713 +COMMAND_PROCESS_LOOP=1231 4657 +COMMAND_PROCESS_LOOP_STR1=123A 4666 +COMMAND_PROCESS_LOOP_STR2=1250 4688 +COMMAND_PROCESS_NEXT_ENTRY=1255 4693 +COMMAND_PROCESS_NEXT_ENTRYI=1254 4692 +COMMAND_PROCESS_NOT_FOUND=1260 4704 +COMMAND_READ =11D9 4569 +CONSOLE_INIT =9B 155 +CONSOLE_INIT_CTC=9B 155 +CONSOLE_INIT_SIO=A3 163 +CS_APU_CTRL =F9 249 +CS_APU_DATA =F8 248 CS_BANK =00 0 CS_CTC_0 =04 4 CS_CTC_1 =05 5 CS_CTC_2 =06 6 CS_CTC_3 =07 7 CS_DIP =01 1 -CS_I2C_S1 =F3 243 -CS_I2C_SX =F2 242 CS_PIA_CR =33 51 CS_PIA_PA =30 48 CS_PIA_PB =31 49 @@ -774,16 +4100,18 @@ CS_SIO_A_C =09 9 CS_SIO_A_D =08 8 CS_SIO_B_C =0B 11 CS_SIO_B_D =0A 10 -DHEX_TO_BYTE = 324 804 -DHEX_TO_BYTE_FAILED= 340 832 -EXEC_RST_08 = EC4 3780 -EXEC_RST_10 = EC8 3784 -EXEC_RST_18 = ED4 3796 -HEX_TO_BIN = 344 836 -HEX_TO_BIN_2 = 352 850 -HEX_TO_INVALID_2= 359 857 +DHEX_TO_BYTE = 161 353 +DHEX_TO_BYTE_FAILED= 17D 381 +ERR_SYNTAX =127F 4735 +EXEC_RST_08 = D01 3329 +EXEC_RST_10 = D05 3333 +EXEC_RST_18 = D11 3345 +HEX_TO_BIN = 181 385 +HEX_TO_BIN_2 = 18F 399 +HEX_TO_INVALID_2= 196 406 IDE_CMD_IDENT =EC 236 IDE_CMD_READSEC=20 32 +IDE_DEF_TABLE = E91 3729 IDE_RD =40 64 IDE_REG_ALTSTS =16 22 IDE_REG_CMDSTS =0F 15 @@ -797,8 +4125,10 @@ IDE_REG_SECTOR =0A 10 IDE_REG_SSECTOR=0B 11 IDE_RST =80 128 IDE_WR =20 32 -IIC_RTC =D0 208 +IIC_CLK =01 1 +IIC_DATA =42 66 INT_VEC =1B 27 +IN_BUFFER =402B 16427 IO_AY0_ADDR =40 64 IO_AY0_DATA =41 65 IO_AY1_ADDR =42 66 @@ -820,299 +4150,472 @@ IO_RTC_SEC1 =21 33 IO_RTC_WEEK =2C 44 IO_RTC_YEAR1 =2B 43 IO_RTC_YERR0 =2A 42 -Includes = 27E 638 MEM_IDE_BASE =5000 20480 -MEM_IDE_BUFFER =5041 20545 +MEM_IDE_BUFFER =5062 20578 MEM_IDE_DEVICE =5000 20480 +MEM_IDE_DEV_TABLE=5041 20545 MEM_IDE_PARTITION=5002 20482 MEM_IDE_POINTER=5006 20486 +MEM_IDE_SELECTED=5061 20577 MEM_IDE_STATUS =5001 20481 -MEM_INT_VEC_T =40FE 16638 -MEM_LOC_LOAD =4400 17408 -MEM_VAR_BLOCK =40FB 16635 -MEM_VAR_TIMEA =40FC 16636 -MEM_VAR_TIMER =40FE 16638 -MSG_CLEAR = 30A 778 -MSG_ERROR =1048 4168 -MSG_START =1061 4193 +MSG_CLEAR = 147 327 +NOT_IMPLEMENTED=1278 4728 +OP_CALL =12DA 4826 +OP_CLR =146E 5230 +OP_DASM =135B 4955 +OP_DUMP =12FA 4858 +OP_EXEC =12C1 4801 +OP_IIC_IN =1422 5154 +OP_IIC_OUT =13C2 5058 +OP_IO_IN =138B 5003 +OP_IO_OUT =13A1 5025 +OP_RTIME =1472 5234 +OP_SET =132A 4906 +OP_STIME =160A 5642 +POST_CHECK_APU =16B8 5816 +POST_CHECK_IDE_30=16E3 5859 +POST_CHECK_IDE_40=16F7 5879 +POST_CHECK_PIO =1693 5779 +POST_START =1683 5763 +POST_TEST_RTC =1712 5906 PRG_RAM_START =4110 16656 PRG_RAM_TOP =FF00 65280 -PRINTINLINE 811E 33054 PROG_MEM_START =4000 16384 PROG_ROM_START = 100 256 -PROMPT_BEGIN =99 153 -PROMPT_BEGIN_READ_BACKSPACE=D6 214 -PROMPT_BEGIN_READ_LOOP=A5 165 -PROMPT_BEGIN_READ_PROCESS=FC 252 RST_00 =00 0 RST_08 =08 8 RST_10 =10 16 RST_18 =18 24 STACK_RAM_TOP =FFFF 65535 START_ROM =00 0 -STRCONV_BYTES_TO_HEX= 35B 859 -STRCONV_BYTES_TO_HEX_1= 36A 874 -STRCONV_BYTES_TO_HEX_2= 374 884 -STR_Banner_Start=1360 4960 -STR_HEXDUMP_HEADER=1390 5008 -STR_PD_HEADER =1319 4889 -STR_SyntaxError=1386 4998 -STR_Unknown =138B 5003 -SYM_ACK =06 6 -SYM_C =43 67 -SYM_CAN =18 24 -SYM_EOT =04 4 -SYM_ETB =17 23 -SYM_NAK =15 21 -SYM_SOH =01 1 +STRCONV_BYTES_TO_HEX= 198 408 +STRCONV_BYTES_TO_HEX_1= 1A7 423 +STRCONV_BYTES_TO_HEX_2= 1B1 433 +STR_Banner_Start=1817 6167 +STR_PD_HEADER =111F 4383 SYS_BUF_START =4010 16400 SYS_RAM_START =4000 16384 +TermClear 8CE0 36064 +TermClearLoop 8CE3 36067 +TermCurrentX 40E0 16608 +TermCurrentY 40E1 16609 +TermCursorEnabled 40E3 16611 +TermCursorState 40E2 16610 +TermInit 8008 32776 +TermInit_copy_loop 8011 32785 +TermPrintChar 8060 32864 +TermPrintCharDone 80FE 33022 +TermPrintCharSPCR 80F4 33012 +TermPrintCharSPDelete 80A1 32929 +TermPrintCharSPDeleteWrap 80BA 32954 +TermPrintCharSPLF 80D4 32980 +TermPrintCharSPLFScroll 80E6 32998 +TermPrintCharWrap 808B 32907 +TermPrintStr 804F 32847 +TermPrintStr_EXIT 805D 32861 +TermPrintStr_LOOP 8051 32849 +TermScroll 8103 33027 +TermScrollClearLine 8144 33092 +TermScrollClearLineLoop 8147 33095 +TermScrollLine 8106 33030 +TermSetCursor 8044 32836 +TermVarMemoryLocation=40E0 16608 +TermVarTemplate 8004 32772 +TermVarTemplateEnd 40E4 16612 +TitleMessage 8169 33129 +Tms16k =80 128 +TmsBackground 829C 33436 +TmsBitmap 837F 33663 +TmsBitmapColorLen= 800 2048 +TmsBitmapFlags = 2C0 704 +TmsBitmapLoop 838C 33676 +TmsBitmapPatternLen=1800 6144 +TmsBlack =01 1 +TmsBlankFlags =80 128 +TmsByteLoop 8313 33555 +TmsChrOut =8280 33408 +TmsClearPixel =A02F 41007 +TmsColorAddr E406 58374 +TmsColorReg =87 135 +TmsColorTableHigh 83B1 33713 +TmsColorTableReg=83 131 +TmsCtrl0Reg =80 128 +TmsCtrl1Reg =81 129 +TmsCyan =07 7 +TmsDarkBlue =04 4 +TmsDarkGreen =0C 12 +TmsDarkRed =06 6 +TmsDarkYellow =0A 10 +TmsDisplayEnable=40 64 +TmsExtVideo = 100 256 +TmsFill 843E 33854 +TmsFillLoop 8443 33859 +TmsFont 84E0 34016 +TmsGray =0E 14 +TmsInitCommon 83CA 33738 +TmsInitNonBitmap 834C 33612 +TmsIntDisable 82CB 33483 +TmsIntEnable 82BE 33470 +TmsIntEnableBit=20 32 +TmsLightBlue =05 5 +TmsLightGreen =03 3 +TmsLightRed =09 9 +TmsLightYellow =0B 11 +TmsLineLoop 8310 33552 +TmsM1 =10 16 +TmsM2 =08 8 +TmsM3 = 200 512 +TmsMagenta =0D 13 +TmsMaskLookup 84B3 33971 +TmsMediumGreen =02 2 +TmsMediumRed =08 8 +TmsMode E402 58370 +TmsMulticolor 8300 33536 +TmsMulticolorFlags=C8 200 +TmsMulticolorPatternLen= 600 1536 +TmsNameAddr E404 58372 +TmsNameReg =82 130 +TmsNumPorts =03 3 +TmsPatternAddr E408 58376 +TmsPatternReg =84 132 +TmsPatternTableHigh 83C5 33733 +TmsPixelColor 84BB 33979 +TmsPixelOp 8488 33928 +TmsPixelOpPlaceHolder 84A9 33961 +TmsPlotPixel 848C 33932 +TmsPort E400 58368 +TmsPorts 8265 33381 +TmsProbe 8241 33345 +TmsProbeFailed 8260 33376 +TmsProbeNext 8246 33350 +TmsProbeWait 8256 33366 +TmsRamIn 828B 33419 +TmsRamInDelay 8290 33424 +TmsRamInDelay2 8298 33432 +TmsRamOut 8280 33408 +TmsRamOutDelay 8287 33415 +TmsReadAddr 8424 33828 +TmsRegIn 8276 33398 +TmsRegOut 826C 33388 +TmsRepeat 8482 33922 +TmsReset 82D8 33496 +TmsScreenColors E40E 58382 +TmsSectionLoop 830E 33550 +TmsSetPixel =B0 176 +TmsSetReg 8268 33384 +TmsSetWait 823B 33339 +TmsSprite32 =02 2 +TmsSpriteAttrAddr E40C 58380 +TmsSpriteAttrReg=85 133 +TmsSpriteConfig 82AD 33453 +TmsSpriteMag =01 1 +TmsSpritePatternAddr E40A 58378 +TmsSpritePatternReg=86 134 +TmsStrOut 8477 33911 +TmsSubs 81E2 33250 +TmsTextColor 844D 33869 +TmsTextFlags =D0 208 +TmsTextMode 8337 33591 +TmsTextNameLen = 3C0 960 +TmsTextPatternLen= 800 2048 +TmsTextPos 8460 33888 +TmsTile 832B 33579 +TmsTileColorLen=20 32 +TmsTileFlags =C0 192 +TmsTileNameLen = 300 768 +TmsTilePatternLen= 800 2048 +TmsTransparent =00 0 +TmsWait E401 58369 +TmsWaits 8238 33336 +TmsWhite =0F 15 +TmsWrite 842F 33839 +TmsWriteAddr 8417 33815 +TmsWriteBit =40 64 +TmsWriteLoop 8432 33842 +TmsXYAddr 84CF 33999 VAR_CONSOLE_BAUD=18 24 VAR_CONSOLE_CONF=0F 15 +VDPTextBufferEnd=3B98 15256 +VDPTextBufferStart=00 0 +VDPWait 8164 33124 VDP_MEM =80 128 VDP_REG =81 129 -_iic_blp 80E2 32994 -_iic_rdy_done 80DF 32991 -_iic_rdy_loop 80D9 32985 -_iic_read_1 80A1 32929 -_iic_read_error 80C7 32967 -_iic_read_last 80B6 32950 -_iic_read_last_1 80C1 32961 -_iic_read_stop 80C8 32968 -_iic_send_1 8070 32880 -_iic_send_stop 8083 32899 -_pause_loop 80EF 33007 -_pause_loop_lp 80F0 33008 -_slow_access 8109 33033 -beep = ED7 3799 -beep_loop = EDA 3802 -beep_pause = EF7 3831 -dasm_00 = ADC 2780 -dasm_01 = DC8 3528 -dasm_02 = B62 2914 -dasm_03 = D9A 3482 -dasm_08 = BDF 3039 -dasm_09 = D6D 3437 -dasm_0A = B44 2884 -dasm_0B = DB1 3505 -dasm_10 = B24 2852 -dasm_12 = B6D 2925 -dasm_18 = AE7 2791 -dasm_1A = B4E 2894 -dasm_20 = B01 2817 -dasm_22 = E0E 3598 -dasm_27 = BA7 2983 -dasm_28 = AFA 2810 -dasm_2A = DDF 3551 -dasm_2F = BAB 2987 -dasm_30 = AF2 2802 -dasm_32 = B78 2936 -dasm_37 = BB7 2999 -dasm_38 = AEB 2795 -dasm_3A = B58 2904 -dasm_3F = BB3 2995 -dasm_76 = BBB 3003 -dasm_80C6 = C38 3128 -dasm_BE = BD5 3029 -dasm_C3 = AE0 2784 -dasm_C88E = C5E 3166 -dasm_C9 = B30 2864 -dasm_CD = B2A 2858 -dasm_D9 = BEC 3052 -dasm_DD = B12 2834 -dasm_DD_01 = DCF 3535 -dasm_DD_09 = D88 3464 -dasm_DD_22 = E24 3620 -dasm_DD_23 = D9F 3487 -dasm_DD_2A = DF6 3574 -dasm_DD_2B = DB6 3510 -dasm_DD_34 = D38 3384 -dasm_DD_35 = D55 3413 -dasm_DD_86 = C40 3136 -dasm_DD_8E = C66 3174 -dasm_DD_96 = C89 3209 -dasm_DD_9E = CA9 3241 -dasm_DD_A6 = CCA 3274 -dasm_DD_AE = D01 3329 -dasm_DD_B6 = CE6 3302 -dasm_DD_BE = D1D 3357 -dasm_DD_E1 = E76 3702 -dasm_DD_E3 = BFC 3068 -dasm_DD_E5 = E60 3680 -dasm_DD_F9 = E46 3654 -dasm_E1 = E70 3696 -dasm_E3 = BF0 3056 -dasm_E5 = E5A 3674 -dasm_E9 = B09 2825 -dasm_ED_42 = D7F 3455 -dasm_ED_43 = E1A 3610 -dasm_ED_44 = BAF 2991 -dasm_ED_45 = B3A 2874 -dasm_ED_46 = BC6 3014 -dasm_ED_4A = D76 3446 -dasm_ED_4B = DEB 3563 -dasm_ED_4D = B35 2869 -dasm_ED_56 = BCB 3019 -dasm_ED_5E = BD0 3024 -dasm_ED_A0 = C14 3092 -dasm_ED_A1 = C26 3110 -dasm_ED_A8 = C1D 3101 -dasm_ED_A9 = C2F 3119 -dasm_ED_B0 = C18 3096 -dasm_ED_B1 = C2A 3114 -dasm_ED_B8 = C21 3105 -dasm_ED_B9 = C33 3123 -dasm_F3 = BC0 3008 -dasm_F9 = E3C 3644 -dasm_FB = BC3 3011 -dasm_FD = B1B 2843 -dasm_FD_01 = DD7 3543 -dasm_FD_09 = D91 3473 -dasm_FD_22 = E30 3632 -dasm_FD_23 = DA8 3496 -dasm_FD_2A = E02 3586 -dasm_FD_2B = DBF 3519 -dasm_FD_34 = D44 3396 -dasm_FD_35 = D61 3425 -dasm_FD_86 = C4F 3151 -dasm_FD_8E = C75 3189 -dasm_FD_96 = C95 3221 -dasm_FD_9E = CB7 3255 -dasm_FD_A6 = CD6 3286 -dasm_FD_AE = D0D 3341 -dasm_FD_B6 = CF1 3313 -dasm_FD_BE = D28 3368 -dasm_FD_E1 = E7E 3710 -dasm_FD_E3 = C08 3080 -dasm_FD_E5 = E68 3688 -dasm_FD_F9 = E50 3664 -dasm_FF = B3F 2879 -dasm_UU = E86 3718 -dasm_UW = E8A 3722 -dasm__AND = CC5 3269 -dasm__CP = D19 3353 -dasm__DEC = D50 3408 -dasm__ED_47 = B97 2967 -dasm__ED_4F = B9F 2975 -dasm__ED_57 = B87 2951 -dasm__ED_5F = B8F 2959 -dasm__INC = D33 3379 -dasm__LD = B83 2947 -dasm__OR = CE2 3298 -dasm__SBC = CA1 3233 -dasm__SUB = C84 3204 -dasm__XOR = CFC 3324 -dasm_opcode_table= 684 1668 -dasm_print16hex_addr= 4B1 1201 -dasm_print8hex = 4C9 1225 -dasm_printFlags_table= E8F 3727 -dasm_printRegister8_table= E9F 3743 -dasm_printRegister8_table_HL= EBF 3775 -dasm_printRegisterIX_table= EA7 3751 -dasm_printRegisterIY_table= EAF 3759 -dasm_printRegisterSP_table= EB7 3767 -disassemble = 375 885 -disassemble_continue= 45B 1115 -disassemble_err= 44B 1099 -disassemble_next= 379 889 -disassemble_print_opcode_params_end= 448 1096 -disassemble_print_opcode_params_loop= 3F4 1012 -disassemble_print_opcode_raw= 3B6 950 -disassemble_print_opcode_raw_fill= 3CA 970 -disassemble_table_first_match= 48D 1165 -disassemble_table_found= 4A7 1191 -disassemble_table_notfound= 4AB 1195 -disassemble_table_seek= 469 1129 -disassemble_table_seek_loop= 46D 1133 -dump_pretty =12BE 4798 -dump_pretty_ascii=12E8 4840 -dump_pretty_ascii_cont=1306 4870 -dump_pretty_ascii_loop=12F0 4848 -dump_pretty_ascii_none=1301 4865 -dump_pretty_col=12DB 4827 -dump_pretty_end=1318 4888 -dump_pretty_nextrow=130C 4876 -dump_pretty_row=12C6 4806 -endPrint 812C 33068 -ide_printerror =116E 4462 -ide_readsector_256=10ED 4333 -ide_readsector_256_done=111C 4380 -ide_readsector_256_waitloop=10EF 4335 -ide_readsector_512_inv=111D 4381 -ide_readsector_512_inv_waitloop=1122 4386 -ide_readsector_timeout=1158 4440 -ide_regread_8 =10CF 4303 -ide_regwrite_8 =10B3 4275 -ide_reset =10A6 4262 -ide_writesector_256=116D 4461 -ideif_init_drive=11F4 4596 -ideif_init_drive_detected=1222 4642 -ideif_init_drive_loop1=1208 4616 -ideif_init_drive_nodrv=121B 4635 -iic_bus_rdy 80E1 32993 -iic_force_stop 80FC 33020 -iic_init 801C 32796 -iic_rdy 80D8 32984 -iic_read 808C 32908 -iic_send 805E 32862 -mon_start_complete=7B 123 -mon_start_init_ctc=50 80 -mon_start_init_serial=64 100 -mon_start_init_sound=50 80 -mon_start_ram =67 103 -mon_start_ram_loop=70 112 +_COMMAND_PROCESS_FOUND=1277 4727 +_OP_CALL =12F9 4857 +_OP_IIC_ACK_ERR=1407 5127 +_OP_IIC_ACK_ERR_str=140E 5134 +_OP_IIC_IN_LOOP=1454 5204 +_OP_IIC_IN_LOOP_TEXT=1461 5217 +_OP_IIC_OUT_LOOP=13D8 5080 +_OP_IIC_OUT_SEND=13F4 5108 +_OP_RTIME_NN =1475 5237 +_OP_RTIME_RD_CMD=152D 5421 +_OP_SET_LOOP =1342 4930 +_OP_STIME_INVALID=15D0 5584 +_OP_STIME_PROMPT=15E7 5607 +_OP_STIME_PROMPT_ERR=15FF 5631 +_OP_STIME_STR_DAY=152E 5422 +_OP_STIME_STR_HOUR=157F 5503 +_OP_STIME_STR_MIN=159A 5530 +_OP_STIME_STR_MON=1549 5449 +_OP_STIME_STR_SEC=15B5 5557 +_OP_STIME_STR_YEAR=1564 5476 +_POST_CHECK_APU_FAILED=16D7 5847 +_POST_CHECK_IDE_FAILED=170B 5899 +_POST_CHECK_PIO_FAILED=16AC 5804 +_POST_TEST_RTC_INVALID=174C 5964 +_POST_TEST_RTC_NOTFOUND=1745 5957 +_STR_NOT_FOUND =129A 4762 +_STR_NOT_IMPLEMENTED=1286 4742 +_STR_SYNTAX =12AE 4782 +_read_bcd_invalid= 144 324 +_shift4 =167E 5758 +beep = D14 3348 +beep_loop = D17 3351 +beep_pause = D34 3380 +dasm_00 = 919 2329 +dasm_01 = C05 3077 +dasm_02 = 99F 2463 +dasm_03 = BD7 3031 +dasm_08 = A1C 2588 +dasm_09 = BAA 2986 +dasm_0A = 981 2433 +dasm_0B = BEE 3054 +dasm_10 = 961 2401 +dasm_12 = 9AA 2474 +dasm_18 = 924 2340 +dasm_1A = 98B 2443 +dasm_20 = 93E 2366 +dasm_22 = C4B 3147 +dasm_27 = 9E4 2532 +dasm_28 = 937 2359 +dasm_2A = C1C 3100 +dasm_2F = 9E8 2536 +dasm_30 = 92F 2351 +dasm_32 = 9B5 2485 +dasm_37 = 9F4 2548 +dasm_38 = 928 2344 +dasm_3A = 995 2453 +dasm_3F = 9F0 2544 +dasm_76 = 9F8 2552 +dasm_80C6 = A75 2677 +dasm_BE = A12 2578 +dasm_C3 = 91D 2333 +dasm_C88E = A9B 2715 +dasm_C9 = 96D 2413 +dasm_CD = 967 2407 +dasm_D9 = A29 2601 +dasm_DD = 94F 2383 +dasm_DD_01 = C0C 3084 +dasm_DD_09 = BC5 3013 +dasm_DD_22 = C61 3169 +dasm_DD_23 = BDC 3036 +dasm_DD_2A = C33 3123 +dasm_DD_2B = BF3 3059 +dasm_DD_34 = B75 2933 +dasm_DD_35 = B92 2962 +dasm_DD_86 = A7D 2685 +dasm_DD_8E = AA3 2723 +dasm_DD_96 = AC6 2758 +dasm_DD_9E = AE6 2790 +dasm_DD_A6 = B07 2823 +dasm_DD_AE = B3E 2878 +dasm_DD_B6 = B23 2851 +dasm_DD_BE = B5A 2906 +dasm_DD_E1 = CB3 3251 +dasm_DD_E3 = A39 2617 +dasm_DD_E5 = C9D 3229 +dasm_DD_F9 = C83 3203 +dasm_E1 = CAD 3245 +dasm_E3 = A2D 2605 +dasm_E5 = C97 3223 +dasm_E9 = 946 2374 +dasm_ED_42 = BBC 3004 +dasm_ED_43 = C57 3159 +dasm_ED_44 = 9EC 2540 +dasm_ED_45 = 977 2423 +dasm_ED_46 = A03 2563 +dasm_ED_4A = BB3 2995 +dasm_ED_4B = C28 3112 +dasm_ED_4D = 972 2418 +dasm_ED_56 = A08 2568 +dasm_ED_5E = A0D 2573 +dasm_ED_A0 = A51 2641 +dasm_ED_A1 = A63 2659 +dasm_ED_A8 = A5A 2650 +dasm_ED_A9 = A6C 2668 +dasm_ED_B0 = A55 2645 +dasm_ED_B1 = A67 2663 +dasm_ED_B8 = A5E 2654 +dasm_ED_B9 = A70 2672 +dasm_F3 = 9FD 2557 +dasm_F9 = C79 3193 +dasm_FB = A00 2560 +dasm_FD = 958 2392 +dasm_FD_01 = C14 3092 +dasm_FD_09 = BCE 3022 +dasm_FD_22 = C6D 3181 +dasm_FD_23 = BE5 3045 +dasm_FD_2A = C3F 3135 +dasm_FD_2B = BFC 3068 +dasm_FD_34 = B81 2945 +dasm_FD_35 = B9E 2974 +dasm_FD_86 = A8C 2700 +dasm_FD_8E = AB2 2738 +dasm_FD_96 = AD2 2770 +dasm_FD_9E = AF4 2804 +dasm_FD_A6 = B13 2835 +dasm_FD_AE = B4A 2890 +dasm_FD_B6 = B2E 2862 +dasm_FD_BE = B65 2917 +dasm_FD_E1 = CBB 3259 +dasm_FD_E3 = A45 2629 +dasm_FD_E5 = CA5 3237 +dasm_FD_F9 = C8D 3213 +dasm_FF = 97C 2428 +dasm_UU = CC3 3267 +dasm_UW = CC7 3271 +dasm__AND = B02 2818 +dasm__CP = B56 2902 +dasm__DEC = B8D 2957 +dasm__ED_47 = 9D4 2516 +dasm__ED_4F = 9DC 2524 +dasm__ED_57 = 9C4 2500 +dasm__ED_5F = 9CC 2508 +dasm__INC = B70 2928 +dasm__LD = 9C0 2496 +dasm__OR = B1F 2847 +dasm__SBC = ADE 2782 +dasm__SUB = AC1 2753 +dasm__XOR = B39 2873 +dasm_opcode_table= 4C1 1217 +dasm_print16hex_addr= 2EE 750 +dasm_print8hex = 306 774 +dasm_printFlags_table= CCC 3276 +dasm_printRegister8_table= CDC 3292 +dasm_printRegister8_table_HL= CFC 3324 +dasm_printRegisterIX_table= CE4 3300 +dasm_printRegisterIY_table= CEC 3308 +dasm_printRegisterSP_table= CF4 3316 +disassemble = 1B2 434 +disassemble_continue= 298 664 +disassemble_err= 288 648 +disassemble_next= 1B6 438 +disassemble_print_opcode_params_end= 285 645 +disassemble_print_opcode_params_loop= 231 561 +disassemble_print_opcode_raw= 1F3 499 +disassemble_print_opcode_raw_fill= 207 519 +disassemble_table_first_match= 2CA 714 +disassemble_table_found= 2E4 740 +disassemble_table_notfound= 2E8 744 +disassemble_table_seek= 2A6 678 +disassemble_table_seek_loop= 2AA 682 +dump_pretty =10C4 4292 +dump_pretty_ascii=10EE 4334 +dump_pretty_ascii_cont=110C 4364 +dump_pretty_ascii_loop=10F6 4342 +dump_pretty_ascii_none=1107 4359 +dump_pretty_col=10E1 4321 +dump_pretty_end=111E 4382 +dump_pretty_nextrow=1112 4370 +dump_pretty_row=10CC 4300 +ide_printerror = E0B 3595 +ide_readsector_256= D8A 3466 +ide_readsector_256_done= DB9 3513 +ide_readsector_256_waitloop= D8C 3468 +ide_readsector_512_inv= DBA 3514 +ide_readsector_512_inv_waitloop= DBF 3519 +ide_readsector_timeout= DF5 3573 +ide_regread_8 = D6C 3436 +ide_regwrite_8 = D50 3408 +ide_reset = D43 3395 +ide_writesector_256= E0A 3594 +ideif_init_drive= EB1 3761 +ideif_init_drive_detected= EDF 3807 +ideif_init_drive_loop1= EC5 3781 +ideif_init_drive_nodrv= ED8 3800 +ideif_init_dtable= EB1 3761 +iic_init = FD8 4056 +iic_read_ack =1017 4119 +iic_receive_buffer= FA9 4009 +iic_receive_buffer_done= FCC 4044 +iic_receive_buffer_err= FD2 4050 +iic_receive_buffer_loop= FBA 4026 +iic_receive_byte=109D 4253 +iic_receive_byte_loop=10AA 4266 +iic_send_ack =103D 4157 +iic_send_buffer= F7F 3967 +iic_send_buffer_done= F9D 3997 +iic_send_buffer_err= FA3 4003 +iic_send_buffer_loop= F8F 3983 +iic_send_byte =1077 4215 +iic_send_byte_loop=1083 4227 +iic_send_ebit = FF6 4086 +iic_send_nack =105A 4186 +iic_send_sbit = FE1 4065 mon_var_template=44 68 -mon_var_template_end=6E 110 -nxtILC 8121 33057 -param_01 = 4D7 1239 -param_02 = 4FE 1278 -param_03 = 51B 1307 -param_03_done = 553 1363 -param_03_neg = 53C 1340 -param_04 = 557 1367 -param_04_i = 567 1383 -param_05 = 56D 1389 -param_06 = 57A 1402 -param_07 = 594 1428 -param_08 = 5A1 1441 -param_09 = 5B6 1462 -param_09_0A = 5BC 1468 -param_0A = 5AD 1453 -param_10 = 5CB 1483 -param_11 = 5DB 1499 -param_11_12 = 5EA 1514 -param_11_12_all= 60A 1546 -param_11_12_def= 5FD 1533 -param_11_12_ix = 602 1538 -param_11_12_iy = 607 1543 -param_12 = 5E3 1507 -param_13 = 61B 1563 -param_80 = 63A 1594 -param_80_seek = 641 1601 -param_81 = 631 1585 -param_comma = 675 1653 -param_printRegister= 650 1616 -param_printRegisterA= 66E 1646 -param_printRegisterHL= 666 1638 -print_a_hex = 2E7 743 -print_char = 2B7 695 -print_clear = 2CA 714 -print_newLine = 2D1 721 -print_str = 2BF 703 -print_str_end = 2C9 713 -print_str_fixed=1358 4952 -print_wait_out = 2DC 732 -read_char = 2F8 760 -read_lba_sector=1256 4694 -str_dev_notfound=12B3 4787 -str_dev_ready =129D 4765 -str_dev_ready2 =12AA 4778 -str_dev_waitready=1289 4745 -str_error_start=11A1 4513 -str_error_start1=11BE 4542 -str_error_start2=11C7 4551 -str_error_time =11D0 4560 -var_buffer =4029 16425 +mon_var_template_end=70 112 +param_01 = 314 788 +param_02 = 33B 827 +param_03 = 358 856 +param_03_done = 390 912 +param_03_neg = 379 889 +param_04 = 394 916 +param_04_i = 3A4 932 +param_05 = 3AA 938 +param_06 = 3B7 951 +param_07 = 3D1 977 +param_08 = 3DE 990 +param_09 = 3F3 1011 +param_09_0A = 3F9 1017 +param_0A = 3EA 1002 +param_10 = 408 1032 +param_11 = 418 1048 +param_11_12 = 427 1063 +param_11_12_all= 447 1095 +param_11_12_def= 43A 1082 +param_11_12_ix = 43F 1087 +param_11_12_iy = 444 1092 +param_12 = 420 1056 +param_13 = 458 1112 +param_80 = 477 1143 +param_80_seek = 47E 1150 +param_81 = 46E 1134 +param_comma = 4B2 1202 +param_printRegister= 48D 1165 +param_printRegisterA= 4AB 1195 +param_printRegisterHL= 4A3 1187 +print_a_hex = 104 260 +print_bcd = 116 278 +print_char =D4 212 +print_clear =E7 231 +print_newLine =EE 238 +print_str =DC 220 +print_str_end =E6 230 +print_str_fixed=115E 4446 +print_wait_out =F9 249 +read_bcd = 12E 302 +read_char = 11C 284 +read_lba_sector= F13 3859 +setup_vars 81F1 33265 +str_dev_notfound= F74 3956 +str_dev_ready = F5E 3934 +str_dev_ready2 = F6B 3947 +str_dev_waitready= F46 3910 +str_error_start= E3E 3646 +str_error_start1= E5B 3675 +str_error_start2= E64 3684 +str_error_time = E6D 3693 +str_post_apu =17A4 6052 +str_post_ide_30=1753 5971 +str_post_ide_40=176E 5998 +str_post_nd =17DA 6106 +str_post_ok =1812 6162 +str_post_pio =1789 6025 +str_post_rtc =17BF 6079 +str_post_rtc_iv=17E8 6120 +var_apu_present=400A 16394 +var_buffer =402B 16427 var_buffer_len =4000 16384 var_bytes_count=411A 16666 var_curserchar =4006 16390 @@ -1129,26 +4632,6 @@ var_opcode_start=4110 16656 var_opcode_string=4117 16663 var_opcode_table=4112 16658 var_opcode_x =4115 16661 -var_ps2mem =4019 16409 -var_scratch =4009 16393 -xmodem_ack =107B 4219 -xmodem_await_conn= F34 3892 -xmodem_end = FDF 4063 -xmodem_err = FA5 4005 -xmodem_init = F06 3846 -xmodem_int = FE6 4070 -xmodem_int_cont=1005 4101 -xmodem_nak =1089 4233 -xmodem_out =1037 4151 -xmodem_packet = F3F 3903 -xmodem_packet_EOT= F9D 3997 -xmodem_packet_get= F51 3921 -xmodem_packet_get_crc= F8A 3978 -xmodem_packet_get_data= F7B 3963 -xmodem_read_timeount=03 3 -xmodem_read_wait=100A 4106 -xmodem_read_wait_loop=1018 4120 -xmodem_read_wait_timeout=1035 4149 -xmodem_wait =1097 4247 -xmodem_wait_1 =109D 4253 -xmodem_wait_out=103D 4157 +var_pio_present=4009 16393 +var_ps2mem =401B 16411 +var_scratch =400B 16395 diff --git a/OperatingSystem/iictest/zout/test.mon b/OperatingSystem/iictest/zout/test.mon index e1034b7..8022c72 100644 --- a/OperatingSystem/iictest/zout/test.mon +++ b/OperatingSystem/iictest/zout/test.mon @@ -1,20 +1,209 @@ -!8000 CD 1C 80 01 00 10 CD EF 80 C3 99 00 11 00 C0 3E -!8010 00 12 06 D0 3E 01 CD 5E 80 C3 99 00 3E CF D3 F6 -!8020 3E F5 D3 F6 3E 00 D3 F4 01 00 10 CD EF 80 3E 02 -!8030 D3 F4 01 00 10 CD EF 80 3E 80 D3 F3 CD 09 81 3E -!8040 55 D3 F2 CD 09 81 3E A0 D3 F3 CD 09 81 3E 18 3E -!8050 00 D3 F2 CD 09 81 3E C1 D3 F3 CD 09 81 C9 C5 F5 -!8060 CD E1 80 78 D3 F2 CD 09 81 3E C5 D3 F3 F1 4F 0C -!8070 DB F3 CB 7F 20 FA CB 67 20 09 1A 13 0D 28 04 D3 -!8080 F2 18 ED 3E C3 D3 F3 CD 09 81 C1 C9 D5 C5 F5 78 -!8090 F6 01 D3 F2 CD 09 81 CD E1 80 3E C5 D3 F3 F1 4F -!80A0 0C DB F3 CB 7F 20 FA CB 5F 20 1C 0D 79 3D 28 06 -!80B0 DB F2 12 13 18 EB 3E 40 D3 F3 CD 09 81 DB F2 12 -!80C0 13 DB F3 CB 7F 20 FA 00 3E C3 D3 F3 CD 09 81 DB -!80D0 F2 CD 09 81 12 C1 D1 C9 F5 DB F3 CB 7F 20 FA F1 -!80E0 C9 F5 DB F3 F5 CD E7 02 F1 CB 47 28 F5 F1 C9 F5 -!80F0 C5 C1 C5 C1 0B 79 B0 C2 F0 80 F1 C9 DB F3 CB 47 -!8100 C0 3E C3 D3 F3 00 00 18 F3 00 00 00 00 00 00 00 -!8110 00 F5 F1 F5 F1 F5 F1 F5 F1 F5 F1 F5 F1 C9 E3 F5 -!8120 C5 7E FE 00 28 06 CD B7 02 23 18 F5 23 C1 F1 E3 -!8130 C9 +!8000 CD 08 80 C9 01 04 00 00 21 E0 40 01 04 80 11 E4 +!8010 40 0A 77 03 23 E5 ED 52 E1 C2 11 80 CD F1 81 21 +!8020 E0 84 CD 37 83 3E 0C CD 9C 82 3E 0F CD 4D 84 3E +!8030 00 1E 00 CD 60 84 21 69 81 CD 77 84 3E 00 1E 04 +!8040 CD 60 84 C9 3A E1 40 5F 3A E0 40 CD 60 84 C9 F5 +!8050 C5 0A F6 00 28 07 CD 60 80 03 C3 51 80 C1 F1 C9 +!8060 F5 C5 D5 E5 FE 7F CA A1 80 FE 0D CA F4 80 FE 0A +!8070 CA D4 80 CD 80 82 3A E0 40 3C FE 27 CA 8B 80 D2 +!8080 8B 80 32 E0 40 CD 44 80 C3 FE 80 AF 32 E0 40 3A +!8090 E1 40 FE 17 CA E6 80 3C 32 E1 40 CD 44 80 C3 FE +!80A0 80 3A E0 40 A7 CA BA 80 3D 32 E0 40 CD 44 80 3E +!80B0 20 CD 80 82 CD 44 80 C3 FE 80 3E 27 32 E0 40 3A +!80C0 E1 40 3D 32 E1 40 CD 44 80 3E 20 CD 80 82 CD 44 +!80D0 80 C3 FE 80 3A E1 40 FE 17 CA E6 80 3C 32 E1 40 +!80E0 CD 44 80 C3 FE 80 CD 03 81 3E 17 32 E1 40 CD 44 +!80F0 80 C3 FE 80 AF 32 E0 40 CD 44 80 C3 FE 80 E1 D1 +!8100 C1 F1 C9 01 00 38 60 69 11 28 00 19 7D D3 81 7C +!8110 E6 3F D3 81 CD 64 81 DB 80 F5 79 D3 81 78 E6 3F +!8120 F6 40 D3 81 F1 CD 64 81 D3 80 03 60 69 11 98 3B +!8130 ED 52 C2 06 81 01 98 03 79 D3 81 78 E6 3F F6 40 +!8140 D3 81 0E 28 01 98 3B 79 D3 81 78 E6 3F F6 40 D3 +!8150 81 3E 20 D3 80 CD 64 81 03 60 69 11 C0 3B ED 52 +!8160 C2 47 81 C9 00 00 00 00 C9 20 20 5A 38 43 20 4D +!8170 6B 20 49 56 20 2D 20 41 20 5A 38 30 20 48 6F 6D +!8180 65 62 72 65 77 20 43 6F 6D 70 75 74 65 72 20 20 +!8190 20 20 20 52 4F 4D 20 56 65 72 2E 20 31 2E 30 20 +!81A0 62 79 20 44 65 6E 6E 69 73 20 47 75 6E 69 61 20 +!81B0 28 32 30 32 32 29 20 20 20 20 20 20 20 20 20 20 +!81C0 20 20 34 38 6B 20 52 41 4D 20 2D 20 34 4D 48 7A +!81D0 20 5A 38 30 20 43 50 55 20 20 20 20 20 20 20 20 +!81E0 20 00 E0 40 00 00 00 38 00 20 00 00 00 18 C0 3B +!81F0 00 3E E0 32 00 E4 3E 02 32 01 E4 3E 00 32 02 E4 +!8200 3E 00 32 03 E4 3E 00 32 04 E4 3E 38 32 05 E4 3E +!8210 00 32 08 E4 3E 00 32 09 E4 3E 00 32 06 E4 3E 20 +!8220 32 07 E4 3E 00 32 0A E4 3E 18 32 0B E4 3E C0 32 +!8230 0C E4 3E 3B 32 0D E4 C9 01 0A 1F 3E 01 32 01 E4 +!8240 C9 21 65 82 06 03 7E 32 00 E4 CD 76 82 CD 76 82 +!8250 FA 60 82 11 FF FF CD 76 82 F8 1B 7B B2 C2 56 82 +!8260 23 10 E3 AF C9 80 98 10 CD 6C 82 7B C5 ED 4B 00 +!8270 E4 0C ED 79 C1 C9 C5 ED 4B 00 E4 0C ED 78 C1 C9 +!8280 C5 ED 4B 00 E4 ED 79 10 FE C1 C9 C5 ED 4B 00 E4 +!8290 10 FE ED 78 ED 4B 00 E4 10 FE C1 C9 E6 0F 47 3A +!82A0 0E E4 E6 F0 B0 32 0E E4 1E 87 C3 68 82 E6 03 47 +!82B0 3A 02 E4 E6 FC B0 32 02 E4 1E 81 C3 68 82 3A 02 +!82C0 E4 F6 20 32 02 E4 1E 81 C3 68 82 3A 02 E4 E6 DF +!82D0 32 02 E4 1E 81 C3 68 82 21 80 00 22 02 E4 7D 1E +!82E0 81 CD 68 82 7C 1E 80 CD 68 82 3E 00 CD 9C 82 3E +!82F0 00 CD 4D 84 11 00 00 01 00 40 3E 00 CD 3E 84 C9 +!8300 CD D8 82 ED 5B 04 E4 CD 17 84 16 06 1E 00 0E 04 +!8310 06 20 7B CD 80 82 3C 10 FA 0D C2 10 83 5F 15 C2 +!8320 0E 83 21 C8 00 22 02 E4 C3 4C 83 CD D8 82 21 C0 +!8330 00 22 02 E4 C3 4C 83 E5 CD D8 82 E1 ED 5B 08 E4 +!8340 01 00 08 CD 2F 84 21 D0 00 22 02 E4 3A 06 E4 E6 +!8350 C0 32 06 E4 57 3A 07 E4 E6 3F 32 07 E4 CB 12 17 +!8360 CB 12 17 1E 83 CD 68 82 AF 32 08 E4 3A 09 E4 E6 +!8370 38 32 09 E4 0F 0F 0F 1E 84 CD 68 82 C3 CA 83 CD +!8380 D8 82 ED 5B 04 E4 CD 17 84 06 03 AF CD 80 82 3C +!8390 C2 8C 83 10 F7 21 C0 02 22 02 E4 AF 32 06 E4 32 +!83A0 08 E4 3A 07 E4 E6 20 32 07 E4 3E FF C2 B1 83 3E +!83B0 7F 1E 83 CD 68 82 3A 09 E4 E6 20 32 09 E4 3E 07 +!83C0 C2 C5 83 3E 03 1E 84 CD 68 82 AF 32 04 E4 3A 05 +!83D0 E4 E6 3C 32 05 E4 0F 0F 1E 82 CD 68 82 3A 0C E4 +!83E0 E6 80 32 0C E4 57 3A 0D E4 E6 7F CB 12 17 1E 85 +!83F0 CD 68 82 AF 32 0A E4 3A 0B E4 E6 38 32 0B E4 0F +!8400 0F 0F 1E 86 CD 68 82 1E 81 3A 02 E4 CD 68 82 3A +!8410 03 E4 1E 80 C3 68 82 7B CD 6C 82 7A E6 3F F6 40 +!8420 CD 6C 82 C9 7B CD 6C 82 7A E6 3F CD 6C 82 C9 CD +!8430 17 84 7E CD 80 82 23 0B 78 B1 C2 32 84 C9 F5 CD +!8440 17 84 F1 CD 80 82 0D C2 43 84 10 F7 C9 87 87 87 +!8450 87 47 3A 0E E4 E6 0F B0 32 0E E4 1E 87 C3 68 82 +!8460 16 00 21 00 00 19 29 29 19 29 29 29 5F 19 ED 5B +!8470 04 E4 19 EB C3 17 84 7E FE 00 C8 CD 80 82 23 C3 +!8480 77 84 CD 80 82 10 FB C9 22 A9 84 C9 78 FE C0 D0 +!8490 CD CF 84 79 E6 07 06 00 4F 21 B3 84 09 46 2A 08 +!84A0 E4 19 EB CD 24 84 CD 8B 82 B0 00 F5 CD 17 84 F1 +!84B0 C3 80 82 80 40 20 10 08 04 02 01 F5 78 FE C0 D0 +!84C0 CD CF 84 2A 06 E4 19 EB CD 17 84 F1 C3 80 82 78 +!84D0 0F 0F 0F E6 1F 57 79 E6 F8 5F 78 E6 07 B3 5F C9 +!84E0 00 00 00 00 00 00 00 00 38 44 6C 44 54 44 38 00 +!84F0 38 7C 54 7C 44 7C 38 00 00 28 7C 7C 7C 38 10 00 +!8500 00 10 38 7C 7C 38 10 00 10 38 38 10 7C 7C 10 00 +!8510 00 10 38 7C 7C 10 38 00 00 00 00 30 30 00 00 00 +!8520 FC FC FC CC CC FC FC FC 00 00 78 48 48 78 00 00 +!8530 FC FC 84 B4 B4 84 FC FC 00 1C 0C 34 48 48 30 00 +!8540 38 44 44 38 10 38 10 00 10 18 14 10 30 70 60 00 +!8550 0C 34 2C 34 2C 6C 60 00 00 54 38 6C 38 54 00 00 +!8560 20 30 38 3C 38 30 20 00 08 18 38 78 38 18 08 00 +!8570 10 38 7C 10 7C 38 10 00 28 28 28 28 28 00 28 00 +!8580 3C 54 54 34 14 14 14 00 38 44 30 28 18 44 38 00 +!8590 00 00 00 00 00 78 78 00 10 38 7C 10 7C 38 10 38 +!85A0 10 38 7C 10 10 10 10 00 10 10 10 10 7C 38 10 00 +!85B0 00 10 18 7C 18 10 00 00 00 10 30 7C 30 10 00 00 +!85C0 00 00 00 40 40 40 7C 00 00 28 28 7C 28 28 00 00 +!85D0 10 10 38 38 7C 7C 00 00 7C 7C 38 38 10 10 00 00 +!85E0 00 00 00 00 00 00 00 00 10 38 38 10 10 00 10 00 +!85F0 6C 6C 48 00 00 00 00 00 00 28 7C 28 28 7C 28 00 +!8600 20 38 40 30 08 70 10 00 64 64 08 10 20 4C 4C 00 +!8610 20 50 50 20 54 48 34 00 30 30 20 00 00 00 00 00 +!8620 10 20 20 20 20 20 10 00 20 10 10 10 10 10 20 00 +!8630 00 28 38 7C 38 28 00 00 00 10 10 7C 10 10 00 00 +!8640 00 00 00 00 00 30 30 20 00 00 00 7C 00 00 00 00 +!8650 00 00 00 00 00 30 30 00 00 04 08 10 20 40 00 00 +!8660 38 44 4C 54 64 44 38 00 10 30 10 10 10 10 38 00 +!8670 38 44 04 18 20 40 7C 00 38 44 04 38 04 44 38 00 +!8680 08 18 28 48 7C 08 08 00 7C 40 40 78 04 44 38 00 +!8690 18 20 40 78 44 44 38 00 7C 04 08 10 20 20 20 00 +!86A0 38 44 44 38 44 44 38 00 38 44 44 3C 04 08 30 00 +!86B0 00 00 30 30 00 30 30 00 00 00 30 30 00 30 30 20 +!86C0 08 10 20 40 20 10 08 00 00 00 7C 00 00 7C 00 00 +!86D0 20 10 08 04 08 10 20 00 38 44 04 18 10 00 10 00 +!86E0 38 44 5C 54 5C 40 38 00 38 44 44 44 7C 44 44 00 +!86F0 78 44 44 78 44 44 78 00 38 44 40 40 40 44 38 00 +!8700 78 44 44 44 44 44 78 00 7C 40 40 78 40 40 7C 00 +!8710 7C 40 40 78 40 40 40 00 38 44 40 5C 44 44 3C 00 +!8720 44 44 44 7C 44 44 44 00 38 10 10 10 10 10 38 00 +!8730 04 04 04 04 44 44 38 00 44 48 50 60 50 48 44 00 +!8740 40 40 40 40 40 40 7C 00 44 6C 54 44 44 44 44 00 +!8750 44 64 54 4C 44 44 44 00 38 44 44 44 44 44 38 00 +!8760 78 44 44 78 40 40 40 00 38 44 44 44 54 48 34 00 +!8770 78 44 44 78 48 44 44 00 38 44 40 38 04 44 38 00 +!8780 7C 10 10 10 10 10 10 00 44 44 44 44 44 44 38 00 +!8790 44 44 44 44 44 28 10 00 44 44 54 54 54 54 28 00 +!87A0 44 44 28 10 28 44 44 00 44 44 44 28 10 10 10 00 +!87B0 78 08 10 20 40 40 78 00 38 20 20 20 20 20 38 00 +!87C0 00 40 20 10 08 04 00 00 38 08 08 08 08 08 38 00 +!87D0 10 28 44 00 00 00 00 00 00 00 00 00 00 00 00 FC +!87E0 30 30 10 00 00 00 00 00 00 00 38 04 3C 44 3C 00 +!87F0 40 40 78 44 44 44 78 00 00 00 38 44 40 44 38 00 +!8800 04 04 3C 44 44 44 3C 00 00 00 38 44 78 40 38 00 +!8810 18 20 20 78 20 20 20 00 00 00 3C 44 44 3C 04 38 +!8820 40 40 70 48 48 48 48 00 10 00 10 10 10 10 18 00 +!8830 08 00 18 08 08 08 48 30 40 40 48 50 60 50 48 00 +!8840 10 10 10 10 10 10 18 00 00 00 68 54 54 44 44 00 +!8850 00 00 70 48 48 48 48 00 00 00 38 44 44 44 38 00 +!8860 00 00 78 44 44 44 78 40 00 00 3C 44 44 44 3C 04 +!8870 00 00 58 24 20 20 70 00 00 00 38 40 38 04 38 00 +!8880 00 20 78 20 20 28 10 00 00 00 48 48 48 58 28 00 +!8890 00 00 44 44 44 28 10 00 00 00 44 44 54 7C 28 00 +!88A0 00 00 48 48 30 48 48 00 00 00 48 48 48 38 10 60 +!88B0 00 00 78 08 30 40 78 00 18 20 20 60 20 20 18 00 +!88C0 10 10 10 00 10 10 10 00 30 08 08 0C 08 08 30 00 +!88D0 28 50 00 00 00 00 00 00 10 38 6C 44 44 7C 00 00 +!88E0 38 44 40 40 44 38 10 30 48 00 48 48 48 58 28 00 +!88F0 0C 00 38 44 78 40 38 00 38 00 38 04 3C 44 3C 00 +!8900 28 00 38 04 3C 44 3C 00 30 00 38 04 3C 44 3C 00 +!8910 38 28 38 04 3C 44 3C 00 00 38 44 40 44 38 10 30 +!8920 38 00 38 44 78 40 38 00 28 00 38 44 78 40 38 00 +!8930 30 00 38 44 78 40 38 00 28 00 10 10 10 10 18 00 +!8940 10 28 00 10 10 10 18 00 20 00 10 10 10 10 18 00 +!8950 28 00 10 28 44 7C 44 00 38 28 38 6C 44 7C 44 00 +!8960 0C 00 7C 40 78 40 7C 00 00 00 78 14 7C 50 3C 00 +!8970 3C 50 50 7C 50 50 5C 00 38 00 30 48 48 48 30 00 +!8980 28 00 30 48 48 48 30 00 60 00 30 48 48 48 30 00 +!8990 38 00 48 48 48 58 28 00 60 00 48 48 48 58 28 00 +!89A0 28 00 48 48 48 38 10 60 48 30 48 48 48 48 30 00 +!89B0 28 00 48 48 48 48 30 00 00 10 38 40 40 38 10 00 +!89C0 18 24 20 78 20 24 5C 00 44 28 10 7C 10 7C 10 00 +!89D0 60 50 50 68 5C 48 48 00 08 14 10 38 10 10 50 20 +!89E0 18 00 38 04 3C 44 3C 00 18 00 10 10 10 10 18 00 +!89F0 18 00 30 48 48 48 30 00 18 00 48 48 48 58 28 00 +!8A00 28 50 00 70 48 48 48 00 28 50 00 48 68 58 48 00 +!8A10 38 04 3C 44 3C 00 3C 00 30 48 48 48 30 00 78 00 +!8A20 10 00 10 30 40 44 38 00 00 00 7C 40 40 40 00 00 +!8A30 00 00 FC 04 04 00 00 00 40 48 50 38 44 08 1C 00 +!8A40 40 48 50 2C 54 1C 04 00 10 00 10 10 38 38 10 00 +!8A50 00 00 24 48 24 00 00 00 00 00 48 24 48 00 00 00 +!8A60 54 00 A8 00 54 00 A8 00 54 A8 54 A8 54 A8 54 A8 +!8A70 A8 FC 54 FC A8 FC 54 FC 10 10 10 10 10 10 10 10 +!8A80 10 10 10 F0 10 10 10 10 10 F0 10 F0 10 10 10 10 +!8A90 50 50 50 D0 50 50 50 50 00 00 00 F0 50 50 50 50 +!8AA0 00 F0 10 F0 10 10 10 10 50 D0 10 D0 50 50 50 50 +!8AB0 50 50 50 50 50 50 50 50 00 F0 10 D0 50 50 50 50 +!8AC0 50 D0 10 F0 00 00 00 00 50 50 50 F0 00 00 00 00 +!8AD0 10 F0 10 F0 00 00 00 00 00 00 00 F0 10 10 10 10 +!8AE0 10 10 10 1C 00 00 00 00 10 10 10 FC 00 00 00 00 +!8AF0 00 00 00 FC 10 10 10 10 10 10 10 1C 10 10 10 10 +!8B00 00 00 00 FC 00 00 00 00 10 10 10 FC 10 10 10 10 +!8B10 10 1C 10 1C 10 10 10 10 50 50 50 5C 50 50 50 50 +!8B20 50 5C 40 7C 00 00 00 00 00 7C 40 5C 50 50 50 50 +!8B30 50 DC 00 FC 00 00 00 00 00 FC 00 DC 50 50 50 50 +!8B40 50 5C 40 5C 50 50 50 50 00 FC 00 FC 00 00 00 00 +!8B50 50 DC 00 DC 50 50 50 50 10 FC 00 FC 00 00 00 00 +!8B60 50 50 50 FC 00 00 00 00 00 FC 00 FC 10 10 10 10 +!8B70 00 00 00 FC 50 50 50 50 50 50 50 7C 00 00 00 00 +!8B80 10 1C 10 1C 00 00 00 00 00 1C 10 1C 10 10 10 10 +!8B90 00 00 00 7C 50 50 50 50 50 50 50 DC 50 50 50 50 +!8BA0 10 FC 00 FC 10 10 10 10 10 10 10 F0 00 00 00 00 +!8BB0 00 00 00 1C 10 10 10 10 FC FC FC FC FC FC FC FC +!8BC0 00 00 00 00 FC FC FC FC E0 E0 E0 E0 E0 E0 E0 E0 +!8BD0 1C 1C 1C 1C 1C 1C 1C 1C FC FC FC FC 00 00 00 00 +!8BE0 00 00 34 48 48 34 00 00 00 70 48 70 48 48 70 40 +!8BF0 78 48 40 40 40 40 40 00 00 7C 28 28 28 28 28 00 +!8C00 78 48 20 10 20 48 78 00 00 00 3C 48 48 30 00 00 +!8C10 00 00 48 48 48 70 40 40 00 00 28 50 10 10 10 00 +!8C20 38 10 38 44 38 10 38 00 30 48 48 78 48 48 30 00 +!8C30 00 38 44 44 28 28 6C 00 30 40 20 10 38 48 30 00 +!8C40 00 00 28 54 54 28 00 00 00 10 38 54 54 38 10 00 +!8C50 00 38 40 78 40 38 00 00 00 30 48 48 48 48 00 00 +!8C60 00 78 00 78 00 78 00 00 00 10 38 10 00 38 00 00 +!8C70 40 30 08 30 40 00 78 00 08 30 40 30 08 00 78 00 +!8C80 00 08 14 10 10 10 10 10 10 10 10 10 10 50 20 00 +!8C90 00 10 00 7C 00 10 00 00 00 28 50 00 28 50 00 00 +!8CA0 30 48 48 30 00 00 00 00 00 00 00 30 30 00 00 00 +!8CB0 00 00 00 20 00 00 00 00 00 1C 10 10 50 50 20 00 +!8CC0 50 28 28 28 00 00 00 00 60 10 20 70 00 00 00 00 +!8CD0 00 00 78 78 78 78 00 00 00 00 00 00 00 00 00 00 +!8CE0 01 00 38 79 D3 81 78 E6 3F F6 40 D3 81 3E 20 D3 +!8CF0 80 CD 64 81 03 60 69 11 C0 3B ED 52 C2 E3 8C AF +!8D00 32 E0 40 32 E1 40 CD 44 80 C9 diff --git a/OperatingSystem/monitor_v2/include/basic.s b/OperatingSystem/monitor_v2/include/.old/basic.s similarity index 100% rename from OperatingSystem/monitor_v2/include/basic.s rename to OperatingSystem/monitor_v2/include/.old/basic.s diff --git a/OperatingSystem/monitor_v2/include/bootldr.s b/OperatingSystem/monitor_v2/include/.old/bootldr.s similarity index 100% rename from OperatingSystem/monitor_v2/include/bootldr.s rename to OperatingSystem/monitor_v2/include/.old/bootldr.s diff --git a/OperatingSystem/monitor_v2/include/debug.s b/OperatingSystem/monitor_v2/include/.old/debug.s similarity index 100% rename from OperatingSystem/monitor_v2/include/debug.s rename to OperatingSystem/monitor_v2/include/.old/debug.s diff --git a/OperatingSystem/monitor_v2/include/disassembler copy.s b/OperatingSystem/monitor_v2/include/.old/disassembler copy.s similarity index 100% rename from OperatingSystem/monitor_v2/include/disassembler copy.s rename to OperatingSystem/monitor_v2/include/.old/disassembler copy.s diff --git a/OperatingSystem/monitor_v2/include/parity.s b/OperatingSystem/monitor_v2/include/.old/parity.s similarity index 100% rename from OperatingSystem/monitor_v2/include/parity.s rename to OperatingSystem/monitor_v2/include/.old/parity.s diff --git a/OperatingSystem/monitor_v2/include/addresses.s b/OperatingSystem/monitor_v2/include/addresses.s index 6f77458..5f189f0 100644 --- a/OperatingSystem/monitor_v2/include/addresses.s +++ b/OperatingSystem/monitor_v2/include/addresses.s @@ -45,3 +45,6 @@ CS_PIO_BD .EQU 0xF5 CS_PIO_BC .EQU 0xF7 CS_PIO_AD .EQU 0xF4 CS_PIO_AC .EQU 0xF6 + +CS_APU_DATA .EQU 0xF8 +CS_APU_CTRL .EQU 0xF9 \ No newline at end of file diff --git a/OperatingSystem/monitor_v2/include/beep.s b/OperatingSystem/monitor_v2/include/beep.s index cf8917a..d172b79 100644 --- a/OperatingSystem/monitor_v2/include/beep.s +++ b/OperatingSystem/monitor_v2/include/beep.s @@ -6,33 +6,32 @@ ;------------------------------------------------------------------------------ beep: push AF - push BC push DE beep_loop: LD A,0x08 OUT (CS_PIO_AD), A - LD BC, 0x28 CALL beep_pause LD A,0x00 OUT (CS_PIO_AD), A - LD BC, 0x24 CALL beep_pause DEC DE ld A,D or E jr NZ, beep_loop pop de - pop bc pop af ret beep_pause: - NEG ; 8 T-states - NEG ; 8 T-states + PUSH BC +_beep_pause_l1: + ;NEG ; 8 T-states + ;NEG ; 8 T-states NEG ; 8 T-states NEG ; 8 T-states DEC BC ; 6 T-states LD A,C ; 9 T-states OR B ; 4 T-states - JP NZ,beep_pause ; 10 T-states + JP NZ,_beep_pause_l1 ; 10 T-states + POP BC RET ; Pause complete, RETurn \ No newline at end of file diff --git a/OperatingSystem/monitor_v2/include/cmd_date.s b/OperatingSystem/monitor_v2/include/cmd_date.s new file mode 100644 index 0000000..96b209e --- /dev/null +++ b/OperatingSystem/monitor_v2/include/cmd_date.s @@ -0,0 +1,201 @@ +ADDR_RTC .equ 0xD0 + +OP_RTIME: + call print_newLine +_OP_RTIME_NN: + ;set pointer + ld hl,[_OP_RTIME_RD_CMD] + ld b, 1 + ld c, ADDR_RTC + call iic_send_buffer + or a + jp nz, _OP_IIC_ACK_ERR + ;read RTC data + ld hl,[var_scratch] + ld b,8 + ld c, ADDR_RTC + call iic_receive_buffer + or a + jp nz, _OP_IIC_ACK_ERR + ;process display hours + ld a,(var_scratch+2) + and 00110000b + RRA + RRA + RRA + RRA + call print_bcd + ld a,(var_scratch+2) + and 00001111b + call print_bcd + ld a,':' + call print_char + ;display minutes + ld a,(var_scratch+1) + and 01110000b + RRA + RRA + RRA + RRA + call print_bcd + ld a,(var_scratch+1) + and 00001111b + call print_bcd + ld a,':' + call print_char + ;display seconds + ld a,(var_scratch+0) + and 01110000b + RRA + RRA + RRA + RRA + call print_bcd + ld a,(var_scratch+0) + and 00001111b + call print_bcd + ld a,' ' + call print_char + ;display date + ld a,(var_scratch+4) + and 00110000b + RRA + RRA + RRA + RRA + call print_bcd + ld a,(var_scratch+4) + and 00001111b + call print_bcd + ld a,'.' + call print_char + ld a,(var_scratch+5) + and 00010000b + RRA + RRA + RRA + RRA + call print_bcd + ld a,(var_scratch+5) + and 00001111b + call print_bcd + ld a,'.' + call print_char + ld a,'2' + call print_char + ld a,'0' + call print_char + ld a,(var_scratch+6) + and 11110000b + RRA + RRA + RRA + RRA + call print_bcd + ld a,(var_scratch+6) + and 00001111b + call print_bcd + + RET +_OP_RTIME_RD_CMD: + db 0x00 + +_OP_STIME_STR_DAY: db 10,13,"Enter Date (00-31) : ",0 +_OP_STIME_STR_MON: db 10,13,"Enter Month (00-12) : ",0 +_OP_STIME_STR_YEAR: db 10,13,"Enter Year (00-99) : ",0 +_OP_STIME_STR_HOUR: db 10,13,"Enter Hours (00-23) : ",0 +_OP_STIME_STR_MIN: db 10,13,"Enter Minutes (00-59) : ",0 +_OP_STIME_STR_SEC: db 10,13,"Enter Seconds (00-59) : ",0 +_OP_STIME_INVALID: db " invaild input. Retry!",0 +;HL contains pointer to stack +;BC returns value (BCD) +_OP_STIME_PROMPT: + push hl + call print_str + pop hl + call read_bcd + cp 0xFF ;if failed + jp Z, _OP_STIME_PROMPT_ERR + ld b,a + call read_bcd + cp 0xFF ;if failed + jp Z, _OP_STIME_PROMPT_ERR + ld c,a + ret +_OP_STIME_PROMPT_ERR: + push HL + ld hl, [_OP_STIME_INVALID] + call print_str + pop hl + jp _OP_STIME_PROMPT + + + +OP_STIME: + xor a + ld (var_scratch),a ;set pointer + ;date + ld hl, [_OP_STIME_STR_DAY] + call _OP_STIME_PROMPT + ld a,b + call _shift4 + and 00110000b ;mask bits; bit6 low -> 24h mode + or c ;add second digit + ld (var_scratch+5),a + ;month + ld hl, [_OP_STIME_STR_MON] + call _OP_STIME_PROMPT + ld a,b + call _shift4 + and 00010000b ;mask bits; bit6 low -> 24h mode + or c ;add second digit + ld (var_scratch+6),a + ;year + ld hl, [_OP_STIME_STR_YEAR] + call _OP_STIME_PROMPT + ld a,b + call _shift4 + and 11110000b ;mask bits; bit6 low -> 24h mode + or c ;add second digit + ld (var_scratch+7),a + ;hours + ld hl, [_OP_STIME_STR_HOUR] + call _OP_STIME_PROMPT + ld a,b + call _shift4 + and 00110000b ;mask bits; bit6 low -> 24h mode + or c ;add second digit + ld (var_scratch+3),a + ; minutes + ld hl, [_OP_STIME_STR_MIN] + call _OP_STIME_PROMPT + ld a,b + call _shift4 + and 01110000b ;mask bits + or c ;add second digit + ld (var_scratch+2),a + ; seconds + ld hl, [_OP_STIME_STR_SEC] + call _OP_STIME_PROMPT + ld a,b + call _shift4 + and 01110000b ;mask bits / bit6 low -> 24h mode (enable clock) + or c ;add second digit + ld (var_scratch+1),a + inc de ;next + + ld c, ADDR_RTC + ld b, 8 + ld hl,[var_scratch] + call iic_send_buffer + or a + jp nz, _OP_IIC_ACK_ERR + + ret + +_shift4: + RLCA + RLCA + RLCA + RLCA + ret \ No newline at end of file diff --git a/OperatingSystem/monitor_v2/include/cmd_disk.s b/OperatingSystem/monitor_v2/include/cmd_disk.s new file mode 100644 index 0000000..a446c9b --- /dev/null +++ b/OperatingSystem/monitor_v2/include/cmd_disk.s @@ -0,0 +1,26 @@ +OP_LSDSK: + call ideif_prnt_devtable + ret + +OP_SELDSK: + ;DE contains pointer + push de + pop hl + ld a,(hl) + sbc 69 + jr c,_OP_SELDSK_INVALID + cp 4 + jr nc, _OP_SELDSK_INVALID + call 0x8000 + ret + +_OP_SELDSK_INVALID: + ld hl,[_OP_SELDSK_INVALID_STR] + call print_str + LD DE,0x20 + LD BC,0x70 + CALL beep + ret + +_OP_SELDSK_INVALID_STR: + db 10,13,"Invalid drive letter",10,13,0 \ No newline at end of file diff --git a/OperatingSystem/monitor_v2/include/cmd_io.s b/OperatingSystem/monitor_v2/include/cmd_io.s new file mode 100644 index 0000000..830c0c9 --- /dev/null +++ b/OperatingSystem/monitor_v2/include/cmd_io.s @@ -0,0 +1,130 @@ +OP_IO_IN: + push DE + pop HL + call DHEX_TO_BYTE + ld c,a ;store result in b + ld a,e ;check for error + and a + jp nz, ERR_SYNTAX + in a,(c) + push af + call print_newLine + pop af + call print_a_hex + ret + +OP_IO_OUT: + push DE + pop HL + call DHEX_TO_BYTE + ld c,a ;store result in b + ld a,e ;check for error + and a + jp nz, ERR_SYNTAX + inc hl + inc hl + ld a,(hl) + cp ' ' + jp nz, ERR_SYNTAX + inc hl + call DHEX_TO_BYTE + push af + ld a,e ;check for error + and a + jp nz, ERR_SYNTAX + pop af + out (c),a + ret + +OP_IIC_OUT: + push DE + pop HL + call DHEX_TO_BYTE ;load start addr + ld (var_scratch+1),A ;store result in ram + ld a,e ;check for error + and a + jp nz, ERR_SYNTAX + inc hl + inc hl + LD BC,[var_scratch + 2] + XOR A + LD (var_scratch),A +_OP_IIC_OUT_LOOP: + ld a,(hl) + cp 0 ;if 0 then end + jp z,_OP_IIC_OUT_SEND + cp ' ' + jp nz, ERR_SYNTAX + inc hl ;next byte + + call DHEX_TO_BYTE + ld (bc),a + inc bc ;incerement pointer + ld a,(var_scratch) + inc a ;increment counter + ld (var_scratch),a + inc HL + inc HL + jr _OP_IIC_OUT_LOOP +_OP_IIC_OUT_SEND: + ld hl,[var_scratch + 2] + ld a,(var_scratch) ;load amount of bytes + ld b,a + ld a,(var_scratch+1) ;load start addr + ld c,a + call iic_send_buffer + or a + jp nz, _OP_IIC_ACK_ERR + ret + +_OP_IIC_ACK_ERR: + LD HL,[_OP_IIC_ACK_ERR_str] + call print_str + ret +_OP_IIC_ACK_ERR_str: + db 10,13,"bus-error: no ACK",0 + +OP_IIC_IN: + push DE + pop HL + call DHEX_TO_BYTE ;load start addr + ld C,a ;store start addr to B + ld a,e ;check for error + and a + jp nz, ERR_SYNTAX + inc hl + inc hl + ld a,(hl) + cp ' ' + jp nz, ERR_SYNTAX + inc hl + call DHEX_TO_BYTE ;read length + ld b,a ;store length in B + push bc + ld a,e ;check for error + and a + jp nz, ERR_SYNTAX + ld hl,[var_scratch] + call iic_receive_buffer + pop bc + or a + jp nz, _OP_IIC_ACK_ERR + ld hl,[_OP_IIC_IN_LOOP_TEXT] + call print_str + ld hl,[var_scratch] + ;print data +_OP_IIC_IN_LOOP: + ld a,(hl) + call print_a_hex + ld a, ' ' + call print_char + inc hl + djnz _OP_IIC_IN_LOOP + ret + +_OP_IIC_IN_LOOP_TEXT: + db 10,13,"rec-buff: ",0 + +OP_CLR: + call print_clear + ret \ No newline at end of file diff --git a/OperatingSystem/monitor_v2/include/cmd_mem.s b/OperatingSystem/monitor_v2/include/cmd_mem.s new file mode 100644 index 0000000..01bbf1d --- /dev/null +++ b/OperatingSystem/monitor_v2/include/cmd_mem.s @@ -0,0 +1,148 @@ +OP_EXEC: + ;DE contains pointer + push DE + pop HL + call DHEX_TO_BYTE + ld b,a ;store result in b + ld a,e ;check for error + and a + jp nz, ERR_SYNTAX + inc HL + inc HL + call DHEX_TO_BYTE + ld c,a + ld a,e ;check for error + and a + jp nz, ERR_SYNTAX + ld h,b + ld l,c + jp (hl) +OP_CALL: + ;DE contains pointer + push DE + pop HL + call DHEX_TO_BYTE + ld b,a ;store result in b + ld a,e ;check for error + and a + jp nz, ERR_SYNTAX + inc HL + inc HL + call DHEX_TO_BYTE + ld c,a + ld a,e ;check for error + and a + jp nz, ERR_SYNTAX + ld h,b + ld l,c + call _OP_CALL + call print_newLine + ret +_OP_CALL + jp (hl) + +OP_DUMP: + ;DE contains pointer + push DE + pop HL + call DHEX_TO_BYTE ;parse start address + ld b,a ;store result in b + ld a,e ;check for error + and a + jp nz, ERR_SYNTAX + inc HL + inc HL + call DHEX_TO_BYTE + ld c,a + ld a,e ;check for error + and a + jp nz, ERR_SYNTAX + inc HL + inc HL + ld a,(HL) + cp ' ' + jp nz, ERR_SYNTAX + inc HL + call DHEX_TO_BYTE + push af + ld a,e ;check for error + and a + jp nz, ERR_SYNTAX + pop af + + ld h,b + ld l,c + ld b,a + + call dump_pretty + ret + +OP_SET: + ;DE contains pointer + push DE + pop HL + call DHEX_TO_BYTE ;parse start address + ld b,a ;store result in b + ld a,e ;check for error + and a + jp nz, ERR_SYNTAX + inc HL + inc HL + call DHEX_TO_BYTE + ld c,a + ld a,e ;check for error + and a + jp nz, ERR_SYNTAX + ;bc now contains the start address + INC HL + INC HL + ;hl now cointains start addr of data bytes +_OP_SET_LOOP: + ld a,(hl) + cp 0 ;if 0 then end + RET Z + cp ' ' + jp nz, ERR_SYNTAX + inc hl ;next byte + call DHEX_TO_BYTE + ld (bc),a ;load byte to + ld a,e + and a + jp nz, ERR_SYNTAX + inc bc + inc hl + inc hl + jp _OP_SET_LOOP + +OP_DASM: + push DE + pop HL + call DHEX_TO_BYTE + ld b,a ;store result in b + ld a,e ;check for error + and a + jp nz, ERR_SYNTAX + inc hl + inc hl + call DHEX_TO_BYTE + ld c,a + ld a,e ;check for error + and a + jp nz, ERR_SYNTAX + inc hl + inc hl + ld a,(HL) + cp ' ' + jp nz, ERR_SYNTAX + inc hl + call DHEX_TO_BYTE + push af + ld a,e ;check for error + and a + jp nz, ERR_SYNTAX + ld h,b + ld l,c + pop af ;restore af + ld b,a + call disassemble + ret \ No newline at end of file diff --git a/OperatingSystem/monitor_v2/include/command.s b/OperatingSystem/monitor_v2/include/command.s new file mode 100644 index 0000000..5445e0e --- /dev/null +++ b/OperatingSystem/monitor_v2/include/command.s @@ -0,0 +1,165 @@ +COMMAND_LUT: + db "date", 0 , [OP_RTIME], [OP_RTIME]>>8 ;Read time + db "setdate", 0 , [OP_STIME], [OP_STIME]>>8 ;Read time + db "pin ", 0 , [OP_IO_IN], [OP_IO_IN]>>8 ;Read port + db "dump ",0, [OP_DUMP], [OP_DUMP]>>8 ;print pretty hexdump + db "pout ", 0 , [OP_IO_OUT], [OP_IO_OUT]>>8 ;Write port + db "iin ", 0, [OP_IIC_IN], [OP_IIC_IN]>>8 ;Read IIC + db "iout ", 0, [OP_IIC_OUT], [OP_IIC_OUT]>>8 ;Write IIC + db "call ", 0, [OP_CALL], [OP_CALL]>>8 ;Call to addr + db "clr", 0, [OP_CLR], [OP_CLR]>>8 ;Call to addr + db "dasm ", 0, [OP_DASM], [OP_DASM]>>8 ;Call to addr + db "jp ", 0,[OP_EXEC], [OP_EXEC]>>8 ;jump to addr + db "rst", 0,0x00,0x00 ;soft reset + db "lsdsk", 0,[OP_LSDSK], [OP_LSDSK]>>8 ;list disks + db "seldsk ", 0,[OP_SELDSK], [OP_SELDSK]>>8 ;select disk + db "$", 0, [OP_EXEC], [OP_EXEC]>>8 ;jump to addr + db "i", 0, [OP_IO_IN], [OP_IO_IN]>>8 ;Read port + db "o", 0, [OP_IO_OUT], [OP_IO_OUT]>>8 ;Write port + db "!", 0, [OP_SET], [OP_SET]>>8 ;Write memory + db "?", 0, [OP_DUMP], [OP_DUMP]>>8 ;Print memory + db 0xFF ;End of Table + +IN_BUFFER .equ var_buffer + +COMMAND: + call print_newLine + ld a,'>' + call print_char + xor a ;reset buffer len + ld (var_buffer_len),a +COMMAND_READ: + call read_char + jp z, COMMAND_READ ;wait for input + cp 13 ; enter + jp z,COMMAND_PROCESS + cp 10 + jp z, COMMAND_READ; skip LF for file load + cp 0x08 ; backspace 0x08 VT102 0x7f Putty + jp z,COMMAND_BACKSPACE + + push af + ; a contains latest char + ld hl,[var_buffer] + ld d,0 + ld a,(var_buffer_len) + ld e,a + add hl,de ;hl now contains pointer to last position in buffer + inc a + ld (var_buffer_len),a ;store incremented buffer length + + pop af + ld (hl),a + call print_char + inc hl + xor a ;a = 0 + ld (hl),a ;always add null termination after last char + jp COMMAND_READ + + +COMMAND_BACKSPACE: + ld a,(var_buffer_len) + and a + jp z, COMMAND_READ ; do not continue if already at char 0 + dec a ;decrement length + ld (var_buffer_len),a ;and store it + ld e,a ;load de with decremented value + ld d,0 + ld hl,[var_buffer] + add hl,de ;hl now contains pointer to last position in buffer + xor a ; store null byte to current location + ld (hl),a + ;call print_delete + ld a, 0x08 + call print_char + ld a, 0x20 + call print_char + ld a, 0x08 + call print_char + jp COMMAND_READ +COMMAND_PROCESS: + ;compare + LD HL,[COMMAND_LUT] ;Lookup table +COMMAND_PROCESS_LOOP: + LD DE,[var_buffer] ;Buffer + LD A,(HL) ;Load first byte of entry + CP 0xFF + JP Z,COMMAND_PROCESS_NOT_FOUND ;if first byte is 0xFF, End is reached + ; compare string loop +COMMAND_PROCESS_LOOP_STR1: + LD A,(DE) + LD B,A + LD A,(HL) + OR B ;not 0 -> match + JP Z, COMMAND_PROCESS_FOUND ;match + + LD A,(DE) + LD B,A + ;LD A,(HL) ;Load first byte of entry + ;call print_a_hex + LD A,(HL) + ;compare byte + XOR B + OR A ;if identical = resoult shopuld be zero + JP Z, COMMAND_PROCESS_LOOP_STR2 ;then continue + ; if not identical + LD A,(HL) + OR A ;if reached end of compare string + JP Z, COMMAND_PROCESS_FOUND ;match + JR COMMAND_PROCESS_NEXT_ENTRY ;next entry on no match + +COMMAND_PROCESS_LOOP_STR2: ;continue with next char + INC HL + INC DE + JR COMMAND_PROCESS_LOOP_STR1 + +COMMAND_PROCESS_NEXT_ENTRYI: ;do not jump here + INC HL +COMMAND_PROCESS_NEXT_ENTRY: ;jump here + LD A,(HL) + OR A + JP NZ,COMMAND_PROCESS_NEXT_ENTRYI ;loop until end of string + INC HL ;skip pointer + INC HL + INC HL + JP COMMAND_PROCESS_LOOP +COMMAND_PROCESS_NOT_FOUND: + LD HL,[_STR_NOT_FOUND] + CALL print_str + JP COMMAND + +COMMAND_PROCESS_FOUND: + PUSH HL + POP BC + INC BC + LD A,(BC) + LD L,A + INC BC + LD A,(BC) + LD H,A + + ;HL: pointer to start of routine + ;DE: buffer start of arguments + CALL _COMMAND_PROCESS_FOUND + JP COMMAND +_COMMAND_PROCESS_FOUND + JP (HL) + +NOT_IMPLEMENTED: + LD HL,[_STR_NOT_IMPLEMENTED] + CALL print_str + RET + +ERR_SYNTAX: + LD HL,[_STR_SYNTAX] + CALL print_str + RET + +_STR_NOT_IMPLEMENTED: + db 10,13,"not implemented",10,13,0 + +_STR_NOT_FOUND: + db 10,13,"invalid command",10,13,0 + +_STR_SYNTAX: + db 10,13,"invalid syntax",10,13,0 \ No newline at end of file diff --git a/OperatingSystem/monitor_v2/include/console.s b/OperatingSystem/monitor_v2/include/console.s index 4d007dc..9acbda1 100644 --- a/OperatingSystem/monitor_v2/include/console.s +++ b/OperatingSystem/monitor_v2/include/console.s @@ -99,6 +99,12 @@ print_a_hex: pop de pop bc pop af + ret + +print_bcd: + ADD 48 ;offset for ascii number + call print_char + ret read_char: call A_RTS_ON @@ -112,6 +118,21 @@ read_char: in a, (CS_SIO_A_D) ; read char if avail ret ; return +read_bcd; + call read_char + jp z, read_bcd + call print_char + sbc 48 ;remove ascii offset + jp c, _read_bcd_invalid ;if carry, wrong input + cp 10 + jp z, _read_bcd_invalid ;if equal or greater than 10, also error + and 0x0F ;mask unused bits + ret +_read_bcd_invalid + ld a, 0xFF + ret + + ;MSG_CRSR_0: ; db 0x1B, "[?25h",0 ;MSG_CRSR_1: diff --git a/OperatingSystem/monitor_v2/include/kdrv_ide8255.s b/OperatingSystem/monitor_v2/include/kdrv_ide8255.s index 6623e71..151ac53 100644 --- a/OperatingSystem/monitor_v2/include/kdrv_ide8255.s +++ b/OperatingSystem/monitor_v2/include/kdrv_ide8255.s @@ -32,6 +32,11 @@ IDE_REG_ALTSTS .EQU 10110b ;Alternate Status/Digital Output IDE_REG_DRVADDR .EQU 10111b ;Drive Address + IDE_REG_LBA0 .EQU 01011b ;Start sector register + IDE_REG_LBA1 .EQU 01100b ;Low byte of the cylinder number + IDE_REG_LBA2 .EQU 01101b ;High two bits of the cylinder number + IDE_REG_LBA3 .EQU 01110b ;Head and device select register + ;================================================================ ; I/O access functions diff --git a/OperatingSystem/monitor_v2/include/kdrv_ideif.s b/OperatingSystem/monitor_v2/include/kdrv_ideif.s index 8be81c0..0d855de 100644 --- a/OperatingSystem/monitor_v2/include/kdrv_ideif.s +++ b/OperatingSystem/monitor_v2/include/kdrv_ideif.s @@ -12,73 +12,378 @@ ;================================================================ ; IDE Variables ;================================================================ - MEM_IDE_BASE .EQU 0x5000 - MEM_IDE_DEVICE .EQU MEM_IDE_BASE - MEM_IDE_STATUS .EQU MEM_IDE_BASE + 1 ;1Byte: 0x00 if status is okay + phase var_idebuffer +MEM_IDE_DEVICE: + defs 1 +MEM_IDE_STATUS: + defs 1 ;1Byte: 0x00 if status is okay +MEM_IDE_PARTITION: + defs 4 ;4*16Bytes: LBA first sector +MEM_IDE_POINTER: + defs 4 ;4*16Bytes: LBA first sector +MEM_IDE_DEV_TABLE: + defs 16*4 +MEM_IDE_SELECTED: + defs 1 +MEM_IDE_STRING_0: + defs 40 +MEM_IDE_STRING_1: + defs 40 +MEM_IDE_STRING_2: + defs 40 +MEM_IDE_STRING_3: + defs 40 +MEM_IDE_BUFFER: + defs 512 +MEM_IDE_FSBUFFER: + defs 256 + dephase + ;DEV-Table layout + ; 0x00 0x00 + ;Status: 0x00 -> Ready + ; 0x01 -> Not found + ; 0x02 -> No supported filesystem + ;I/O Addr: Base addr of 82C55 + ;Type: File system type - MEM_IDE_PARTITION .EQU MEM_IDE_BASE + 2 ;4*16Bytes: LBA first sector - MEM_IDE_POINTER .EQU MEM_IDE_BASE + 6 ;4*16Bytes: LBA first sector - MEM_IDE_BUFFER .EQU MEM_IDE_BASE + 65 ;512Byte: buffer for read/write data +IDE_DEV_TABLE: + db 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, [MEM_IDE_STRING_0], [MEM_IDE_STRING_0]>>8, 0x00, 0x00 + db 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x01, [MEM_IDE_STRING_1], [MEM_IDE_STRING_1]>>8, 0x00, 0x00 + db 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, [MEM_IDE_STRING_2], [MEM_IDE_STRING_2]>>8, 0x00, 0x00 + db 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, [MEM_IDE_STRING_3], [MEM_IDE_STRING_3]>>8, 0x00, 0x00 ;================================================================ ; IDE funtions ;================================================================ +;------------------------------------------------------------------------------ +; ideif_init_table +; +; initializes drive table +;------------------------------------------------------------------------------ +ideif_init_devtable: + ;copy default values to ram + ld hl,[IDE_DEV_TABLE] + ld de,[MEM_IDE_DEV_TABLE] + ld bc,16*4 + ldir + ;set selected device + ld a,0 + ld (MEM_IDE_SELECTED),a + ;set empty names + xor a + ld (MEM_IDE_STRING_0),a + ld (MEM_IDE_STRING_1),a + ld (MEM_IDE_STRING_2),a + ld (MEM_IDE_STRING_3),a + ret + +;------------------------------------------------------------------------------ +; ideif_prnt_devtable +; +; prints drive table +;------------------------------------------------------------------------------ +ideif_prnt_devtable: + call print_newLine + ld hl,[_ideif_prnt_devtable_hdr] + call print_str + ld hl,[MEM_IDE_DEV_TABLE] + ld b,0 ;device number +_ideif_prnt_devtable_l1: ;loop 1 -> for each device +;print if selected + ld a,(MEM_IDE_SELECTED) + cp b + jp z,_ideif_prnt_devtable_l1_sel + ld a, ' ' + jr _ideif_prnt_devtable_l1_nxt +_ideif_prnt_devtable_l1_sel: + ld a, '*' +_ideif_prnt_devtable_l1_nxt: + call print_char +;print drive letter + ld a,b + add 69 ;offset letter to D + call print_char + ld a, ':' + call print_char + ld a, ' ' + call print_char +;print status + push hl + ld a,(HL) + or a + jr z, _ideif_prnt_devtable_l1_s00 + cp 0x01 + jr z, _ideif_prnt_devtable_l1_s01 + cp 0x02 + jr z, _ideif_prnt_devtable_l1_s02 + cp 0xFF + jr z, _ideif_prnt_devtable_l1_sFF + jr _ideif_prnt_devtable_l1_sFF +_ideif_prnt_devtable_l1_s00 + ld hl,[_ideif_prnt_devtable_s00] + jr _ideif_prnt_devtable_l1_es +_ideif_prnt_devtable_l1_s01 + ld hl,[_ideif_prnt_devtable_s01] + jr _ideif_prnt_devtable_l1_es +_ideif_prnt_devtable_l1_s02 + ld hl,[_ideif_prnt_devtable_s02] + jr _ideif_prnt_devtable_l1_es +_ideif_prnt_devtable_l1_sFF + ld hl,[_ideif_prnt_devtable_sFF] +_ideif_prnt_devtable_l1_es + call print_str + pop hl + inc hl +;print FS-Type + ld a,'0' + call print_char + ld a,'x' + call print_char + ld a,(HL) + call print_a_hex + ld a,' ' + call print_char + inc hl +;print first sector + push hl + pop ix + + inc hl + inc hl + inc hl + inc hl + inc hl + inc hl + inc hl + inc hl + + ld a,(ix+3) + call print_a_hex + ld a,(ix+2) + call print_a_hex + ld a,(ix+1) + call print_a_hex + ld a,(ix+0) + call print_a_hex + ld a,' ' + call print_char +;print length + ld a,(ix+7) + call print_a_hex + ld a,(ix+6) + call print_a_hex + ld a,(ix+5) + call print_a_hex + ld a,(ix+4) + call print_a_hex + ld a,' ' + call print_char +;print Port + ld a,'0' + call print_char + ld a,'x' + call print_char + ld a,(HL) + call print_a_hex + ld a,' ' + call print_char + inc hl +;print M/S + ld a,(HL) + push hl + or a + jp z,_ideif_prnt_devtable_l1_ms + ld hl,[_ideif_prnt_devtable_slave] + jp _ideif_prnt_devtable_l1_e2 +_ideif_prnt_devtable_l1_ms + ld hl,[_ideif_prnt_devtable_master] +_ideif_prnt_devtable_l1_e2 + call print_str + pop hl + inc hl +;print str + push bc + ld a,(hl) + ld c,a + inc hl + ld a,(hl) + ld b,a + inc hl + push hl + ld h,b + ld l,c + call print_str + call print_newLine + pop hl + pop bc +;next + inc hl + inc hl + inc b + ld a,b + cp 4 + ret z + jp _ideif_prnt_devtable_l1 ;------------------------------------------------------------------------------ ; ideif_init_drive ; -; initializes drive +; initializes selected drive in table ;------------------------------------------------------------------------------ ideif_init_drive: - xor a - ld (MEM_IDE_DEVICE),A ;Set device to 0 - ld (MEM_IDE_STATUS),A ;Set status to 0 (OK) - di ;disable interrupt - call ide_reset ;Reset drives on bus - ld hl, [str_dev_waitready] - call print_str ;print waiting message - ld DE, 0x1FFF ;preload timeout counter -ideif_init_drive_loop1: + call ideif_get_drv_pointer + ; load addresses. not used atm + ;ld a,(IX+6) ;load IO Addr + ;ld d,a + ;ld a,(IX+7) ;load Master/Slave bit + ;ld e,a + call ide_reset + + ld bc, 0x5FFF ;preload timeout counter +_ideif_init_drive_loop: ld b, IDE_REG_CMDSTS call ide_regread_8 ;read drive status register - OR A - JR Z, ideif_init_drive_nodrv ;no drive found - BIT 6,A ;Wait for device ready - JR NZ, ideif_init_drive_detected - DEC DE ; decrement timeout - LD A,D - OR E - JR Z, ideif_init_drive_nodrv - JR ideif_init_drive_loop1 + or a + jr z,_ideif_init_drive_nodrv ;no drive found + bit 6,a + jr nz, _ideif_init_drive_found + dec de + ld a,d + or e + jr z, _ideif_init_drive_nodrv + jr _ideif_init_drive_loop -ideif_init_drive_nodrv: - ld hl, [str_dev_notfound] - call print_str - RET +_ideif_init_drive_nodrv: + ld(ix+0),0x01 + ret -ideif_init_drive_detected: - ld hl, [str_dev_ready] - call print_str - LD B, IDE_REG_CMDSTS ;Get drive identification - LD A, IDE_CMD_IDENT +_ideif_init_drive_found: + ld (ix+0),0x02 + ;get drive name + ld b, IDE_REG_CMDSTS ;Get drive identification + ld a, IDE_CMD_IDENT call ide_regwrite_8 ;Write command to drive - LD HL,MEM_IDE_BUFFER ;set read/write buffer start address + ld hl, MEM_IDE_BUFFER ;set read/write buffer start address call ide_readsector_256 ;read 256 words from device - LD HL,MEM_IDE_BUFFER + 20 ;print device serial - LD B, 20 - CALL print_str_fixed - ld hl, [str_dev_ready2] + ld hl,MEM_IDE_BUFFER + 54 ;print device serial + ld a,(ix+12) ;load str pointer into de + ld e,a + ld a,(ix+13) + ld d,a + ld bc,40 ;copy 40 char + ldir + ;get partition table + ;read bootsector + ld a,1 ;read 1 sector + ld B,IDE_REG_SECTOR + call ide_regwrite_8 + ld a,1 ;read sector 0 + ld b,IDE_REG_SSECTOR + call ide_regwrite_8 + ld a,0 ;read cylinder 0 + ld b,IDE_REG_LCYL + call ide_regwrite_8 + ld a,0 + ld b,IDE_REG_HCYL + call ide_regwrite_8 + ld a,10100000b ;read head 0 + ld b,IDE_REG_HEAD + call ide_regwrite_8 + ld a,IDE_CMD_READSEC ;send read command + ld b,IDE_REG_CMDSTS + call ide_regwrite_8 + ld hl, MEM_IDE_BUFFER ;set read/write buffer start address + call ide_readsector_512_inv ;read 256 words from device + ;prepare partitions + ld b,4 ;Partition table length + ld c,0 ;Partition ID counter + ld iy,MEM_IDE_BUFFER+446 ;Load offest of first partition table entry +_ideif_init_drive_prt_l1: + ld a,(iy+4) ;load status byte + or a + jp NZ, _ideif_init_drive_prt_fnd ;If not zero, jump to print function + jp _ideif_init_drive_prt_ln +_ideif_init_drive_prt_ln: + ld de,16 + add iy,de + djnz _ideif_init_drive_prt_l1 + ret +_ideif_init_drive_prt_fnd; + ld a,(iy+4) + ld (ix+1),a ;store partition type + cp 0x0E ;if not 0xE0, continue with next entry + jr nz, _ideif_init_drive_prt_ln + ;get start LBA + ld a,(iy+0x08) + ld (ix+0x02),a + ld a,(iy+0x09) + ld (ix+0x03),a + ld a,(iy+0x0A) + ld (ix+0x04),a + ld a,(iy+0x0B) + ld (ix+0x05),a + ld (ix+0),0x00 + ;get count LBA + ld a,(iy+0x0C) + ld (ix+0x06),a + ld a,(iy+0x0D) + ld (ix+0x07),a + ld a,(iy+0x0E) + ld (ix+0x08),a + ld a,(iy+0x0F) + ld (ix+0x09),a + ld (ix+0),0x00 + ret + +;------------------------------------------------------------------------------ +; ideif_get_drv_pointer +; +; gets pointer to selected drive in table in IX +;------------------------------------------------------------------------------ +ideif_get_drv_pointer: + push af + push bc + ;get selected drive + ld a,(MEM_IDE_SELECTED) + ;multiply a *8 + rlca ;*2 + rlca ;*4 + rlca ;*8 + ld b,0 + ld c,a + ld ix,[MEM_IDE_DEV_TABLE] + add ix,bc + pop bc + pop af + ret + +;------------------------------------------------------------------------------ +; ideif_init_all +; +; initializes interface +;------------------------------------------------------------------------------ +ideif_init_all: + ld hl, [str_dev_waitready] + call print_str ;print waiting message + + call ideif_init_devtable + call ideif_init_drive + + ld hl, [str_dev_done] call print_str - LD HL,MEM_IDE_BUFFER + 54 ;print device name - LD B, 40 - CALL print_str_fixed - LD A,10 ;New line - CALL print_char - LD A,13 - CALL print_char RET + +;------------------------------------------------------------------------------ +; ideif_drv_sel +; +; Selects drive from table and initializes the fat16 file system +; A contains drive id +;------------------------------------------------------------------------------ + + + ;------------------------------------------------------------------------------ ; read_lba_sector ; @@ -90,24 +395,23 @@ read_lba_sector: LD B,IDE_REG_SECTOR ;amount of sectores CALL ide_regwrite_8 + LD A,(HL) + LD B,IDE_REG_LBA0 + CALL ide_regwrite_8 + INC HL + LD A,(HL) + LD B,IDE_REG_LBA1 + CALL ide_regwrite_8 + INC HL + LD A,(HL) + LD B,IDE_REG_LBA2 + CALL ide_regwrite_8 + INC HL LD A,(HL) AND 00001111b OR 11100000b - LD B,IDE_REG_HEAD + LD B,IDE_REG_LBA3 CALL ide_regwrite_8 - INC HL - LD A,(HL) - LD B,IDE_REG_HCYL - CALL ide_regwrite_8 - INC HL - LD A,(HL) - LD B,IDE_REG_LCYL - CALL ide_regwrite_8 - INC HL - LD A,(HL) - LD B,IDE_REG_SSECTOR - CALL ide_regwrite_8 - INC HL LD A,IDE_CMD_READSEC ;send read command LD B,IDE_REG_CMDSTS @@ -117,17 +421,29 @@ read_lba_sector: ret + + + ;================================================================ ; IDE strings ;=============================================================== str_dev_waitready: - db 13,10,"Detecting drives ",0 + db 13,10,"Detecting drives ... ",0 +str_dev_done: + db "done!",13,10,0 -str_dev_ready: - db "found!",13,10,"ID: ",0 -str_dev_ready2: - db " Desc: ",0 - -str_dev_notfound: - db "no drive",13,10,0 +_ideif_prnt_devtable_hdr: + db "DRV Status Type LBA Length Port M/S Name",10,13,0 +_ideif_prnt_devtable_s00: + db "Avail ",0 +_ideif_prnt_devtable_s01: + db "Not Found ",0 +_ideif_prnt_devtable_s02: + db "Unkown FS ",0 +_ideif_prnt_devtable_sFF: + db "Ctrl. Err ",0 +_ideif_prnt_devtable_master: + db "Master ",0 +_ideif_prnt_devtable_slave: + db "Slave ",0 \ No newline at end of file diff --git a/OperatingSystem/monitor_v2/include/kdrv_siic.s b/OperatingSystem/monitor_v2/include/kdrv_siic.s new file mode 100644 index 0000000..fb43c55 --- /dev/null +++ b/OperatingSystem/monitor_v2/include/kdrv_siic.s @@ -0,0 +1,289 @@ +;---------------------------------------------------------------- +;BIOS Driver for I2C Protocol (Software) +;by Dennis Gunia (01/2024) +; +; SCL is connected to PA1 of PIO (U6) with pull-up +; SDA is connected to PA0 of PIO (U6) with pull-up +;---------------------------------------------------------------- + + +;================================================================ +; I/O registers +;================================================================ + + +;================================================================ +; I/O pins +;================================================================ + IIC_CLK .EQU 00000001b + IIC_DATA .EQU 00000010b + +;================================================================ +; basic access functions +;================================================================ +;HL contains buffer location +;B defines amount of bytes to send +;C contains device address +iic_send_buffer: + CALL iic_send_sbit ;Send startbit + LD A,C + AND 0xFE ;Mask R/W bit (must be 0 for write) + CALL iic_send_byte ;Send Address + CALL iic_read_ack + OR A ; if no ack, error + JP NZ, iic_send_buffer_err +iic_send_buffer_loop; + LD A,(HL) + INC HL + CALL iic_send_byte + CALL iic_read_ack + OR A ; if no ack, error + JP NZ, iic_send_buffer_err + DJNZ iic_send_buffer_loop ;loop for remaining bytes +iic_send_buffer_done: + CALL iic_send_ebit + LD A,0 + RET +iic_send_buffer_err: + CALL iic_send_ebit + LD A,1 + RET + +;HL contains buffer location +;B defines amount of bytes to send +;C contains device address +iic_receive_buffer: + DEC B + CALL iic_send_sbit ;Send startbit + LD A,C + OR 0x01 ;set R/W bit (must be 1 for read) + CALL iic_send_byte ;Send Address + CALL iic_read_ack + OR A ; if no ack, error + JP NZ, iic_receive_buffer_err +iic_receive_buffer_loop: + CALL iic_receive_byte + LD (HL),A + INC HL + CALL iic_send_ack + DJNZ iic_receive_buffer_loop + ; last time: + CALL iic_receive_byte + LD (HL),A + INC HL + CALL iic_send_nack + +iic_receive_buffer_done: + CALL iic_send_ebit + LD A,0 + RET +iic_receive_buffer_err: + CALL iic_send_ebit + LD A,1 + RET + + + +;================================================================ +; I/O access functions +;================================================================ + +;Reset PIO configuration +iic_init: + ;Set port to controll mode (MODE3) + LD A,0xCF + OUT (CS_PIO_AC), A + ;Set inputs/outputs + LD A,0xF0 + OUT (CS_PIO_AC), A + RET + +; send start bit +iic_send_sbit: + ;Set port to controll mode (MODE3) + LD A,0xCF + OUT (CS_PIO_AC), A + ;Set inputs/outputs (SDA and SCL is now output) + LD A,0xFC + OUT (CS_PIO_AC), A + ;SCL HIGH, SDA LOW + LD A,0x02 + OUT (CS_PIO_AD), A + NOP + NOP + LD A,0x00 + OUT (CS_PIO_AD), A + NOP + NOP + RET + +; send end/stop bit +iic_send_ebit: + ;Set port to controll mode (MODE3) + LD A,0xCF + OUT (CS_PIO_AC), A + + ;Set inputs/outputs (SDA and SCL is now output) + LD A,0xFC + OUT (CS_PIO_AC), A + ;SCL HIGH, SDA LOW + LD A,0x02 + OUT (CS_PIO_AD), A + NOP + NOP + LD A,0x03 ; both high + OUT (CS_PIO_AD), A + NOP + NOP + ;release bus + ;Set port to controll mode (MODE3) + LD A,0xCF + OUT (CS_PIO_AC), A + NOP + NOP + ;Set inputs/outputs (SDA and SCL is now input, sound enabled) + LD A,11110111b + OUT (CS_PIO_AC), A + NOP + NOP + RET + + +iic_read_ack: + LD A,0xCF + OUT (CS_PIO_AC), A + ;Set inputs/outputs (SCL is now output, SDA input) + LD A,0xFD + OUT (CS_PIO_AC), A + NOP + NOP + LD A,0x00 ;set SCL LOW + OUT (CS_PIO_AD), A + NOP + NOP + XOR 0x02 ;set SCL HIGH + OUT (CS_PIO_AD), A + NOP + IN A,(CS_PIO_AD) ; Read SDA + NOP + NOP + PUSH AF + AND 0xFE ; Filter input + XOR 0x02 ;set SCL LOW + OUT (CS_PIO_AD), A + NOP + NOP + POP AF + AND 1 + RET + +iic_send_ack: + ;Set port to controll mode (MODE3) + LD A,0xCF + OUT (CS_PIO_AC), A + ;Set inputs/outputs (SDA and SCL is now output) + LD A,0xFC + OUT (CS_PIO_AC), A + NOP + NOP + LD A,0x00 ; SCL LOW, SDA LOW + OUT (CS_PIO_AD), A + NOP + NOP + LD A,0x02 ; SCL HIGH, SDA LOW + OUT (CS_PIO_AD), A + NOP + NOP + LD A,0x00 ; SCL LOW, SDA LOW + OUT (CS_PIO_AD), A + NOP + NOP + RET + +iic_send_nack: + ;Set port to controll mode (MODE3) + LD A,0xCF + OUT (CS_PIO_AC), A + ;Set inputs/outputs (SDA and SCL is now output) + LD A,0xFC + OUT (CS_PIO_AC), A + NOP + NOP + LD A,0x02 ; SCL LOW, SDA HIGH + OUT (CS_PIO_AD), A + NOP + NOP + LD A,0x03 ; both high + OUT (CS_PIO_AD), A + NOP + NOP + LD A,0x02 ; SCL LOW, SDA HIGH + OUT (CS_PIO_AD), A + NOP + NOP + RET + +;A contains byte +iic_send_byte: + PUSH BC + LD C,A ;buffer + ;Set port to controll mode (MODE3) + LD A,0xCF + OUT (CS_PIO_AC), A + ;Set inputs/outputs (SDA and SCL is now output) + LD A,0xFC + OUT (CS_PIO_AC), A + LD B,8 ;bit counter + +iic_send_byte_loop: + ;prepare data + RL C + LD A,0 + RLA ; set SCA bit from carry, SCL LOW + OUT (CS_PIO_AD), A + NOP + NOP + XOR 0x02 ;set SCL HIGH + OUT (CS_PIO_AD), A + NOP + NOP + XOR 0x02 ;set SCL LOW + OUT (CS_PIO_AD), A + NOP + NOP + DJNZ iic_send_byte_loop ;loop until counter is 0 + ;transmittion end / end loop + LD A,C + POP BC + RET + +iic_receive_byte: + PUSH BC + ;Set port to controll mode (MODE3) + LD A,0xCF + OUT (CS_PIO_AC), A + ;Set inputs/outputs (SCL is now output, SDA input) + LD A,0xFD + OUT (CS_PIO_AC), A + LD B,8 ;bit counter + LD C,0 +iic_receive_byte_loop: + XOR A ;set SCL LOW + OUT (CS_PIO_AD), A + NOP + NOP + LD A,2 ;set SCL HIGH + OUT (CS_PIO_AD), A + NOP + IN A, (CS_PIO_AD) + NOP + RRA ;read SDA bit + RL C ;store bit + XOR A ;set SCL LOW again + OUT (CS_PIO_AD), A + NOP + NOP + DJNZ iic_receive_byte_loop + LD A,C + POP BC + RET \ No newline at end of file diff --git a/OperatingSystem/monitor_v2/include/post.s b/OperatingSystem/monitor_v2/include/post.s new file mode 100644 index 0000000..8495847 --- /dev/null +++ b/OperatingSystem/monitor_v2/include/post.s @@ -0,0 +1,120 @@ +;Power-On self test +POST_START: + call POST_CHECK_PIO + call POST_CHECK_APU + call POST_TEST_RTC + call POST_CHECK_IDE_30 + call POST_CHECK_IDE_40 + ret + +POST_CHECK_PIO: + ld hl,[str_post_pio] + call print_str + in a,(CS_PIO_AC) ;test read from pio + cp 0x00 ;0x78 when not installed + jp nz, _POST_CHECK_PIO_FAILED + ld a, 0x00 ;set present flag + ld (var_pio_present),a + ld hl,[str_post_ok] + call print_str + ret +_POST_CHECK_PIO_FAILED: + ld a, 0xFF + ld (var_pio_present),a + ld hl,[str_post_nd] + call print_str + ret + +POST_CHECK_APU: + ld hl,[str_post_apu] + call print_str + + ld a, 0xFF + out (CS_APU_DATA),a + nop + nop + in a,(CS_APU_DATA) + cp 0xFF + jp nz, _POST_CHECK_APU_FAILED + ld a, 0x00 ;set present flag + ld (var_apu_present),a + ld hl,[str_post_ok] + call print_str + ret +_POST_CHECK_APU_FAILED: + ld a, 0xFF + ld (var_apu_present),a + ld hl,[str_post_nd] + call print_str + ret + +POST_CHECK_IDE_30: + ld hl,[str_post_ide_30] + call print_str + in a,(0x30) + or a + jp nz, _POST_CHECK_IDE_FAILED + ld hl,[str_post_ok] + call print_str + ret +POST_CHECK_IDE_40: + ld hl,[str_post_ide_40] + call print_str + in a,(0x40) + or a + jp nz, _POST_CHECK_IDE_FAILED + ld hl,[str_post_ok] + call print_str + ret + +_POST_CHECK_IDE_FAILED + ld hl,[str_post_nd] + call print_str + ret + +POST_TEST_RTC: + ld a, 0x06 + ld (var_scratch),a + ld hl,[str_post_rtc] + call print_str + ld hl,[var_scratch] + ld b, 1 + ld c, ADDR_RTC + call iic_send_buffer + or a + jp nz, _POST_TEST_RTC_NOTFOUND + ld hl,[var_scratch] + ld b, 1 + ld c, ADDR_RTC + call iic_receive_buffer + ld a, (var_scratch) + or a + jp z, _POST_TEST_RTC_INVALID + ld hl,[str_post_ok] + call print_str + jp _OP_RTIME_NN +_POST_TEST_RTC_NOTFOUND: + ld hl,[str_post_nd] + call print_str + ret +_POST_TEST_RTC_INVALID: + ld hl,[str_post_rtc_iv] + call print_str + ret + +str_post_ide_30: + db 13,10,"Check Diskctrl.@030h... ",0 +str_post_ide_40: + db 13,10,"Check Diskctrl.@040h... ",0 +str_post_pio: + db 13,10,"Check IO-Controller ... ",0 +str_post_apu: + db 13,10,"Check AMD8911 APU ... ",0 +str_post_rtc: + db 13,10,"Check DS1307 RTC ... ",0 +str_post_nd: + db "not detected!",0 +str_post_rtc_iv: + db "not set. Check battery and run 'setdate'!",0 +str_post_ok: + db "ok! ",0 \ No newline at end of file diff --git a/OperatingSystem/monitor_v2/main.asm b/OperatingSystem/monitor_v2/main.asm index 4a33729..96c5109 100644 --- a/OperatingSystem/monitor_v2/main.asm +++ b/OperatingSystem/monitor_v2/main.asm @@ -1,12 +1,21 @@ +;---------------------------------------------------------------- +;Z8C Homebrew Computer Monitor +;by Dennis Gunia (01/2023) +;---------------------------------------------------------------- + +;================================================================ +; Memory areas +;================================================================ SYS_RAM_START equ 0x4000 SYS_BUF_START equ 0x4010 PRG_RAM_START equ 0x4110 PRG_RAM_TOP equ 0xFF00 STACK_RAM_TOP equ 0xFFFF -;VAR_CONSOLE_CONF equ 0x07 ;CLK/TRG Clock @ 1843220.5/s +;================================================================ +; Terminal configuration +;================================================================ VAR_CONSOLE_CONF equ 0x0F ;CPU/16 Clock @ 230402.5625/s - VAR_CONSOLE_BAUD equ 24 ;BAUD timer constant ;CLK/TRG Clock @ 1843220.5/s ; -> 0x16 : 14400 @@ -14,14 +23,18 @@ VAR_CONSOLE_BAUD equ 24 ;BAUD timer constant ; -> 12 : 19200 ; -> 24 : 9600 +;================================================================ +; Includes (1/2) +;================================================================ ; include IO device addresses .include "addresses.s" +;================================================================ +; RST Vectors for BASIC +;================================================================ org 0x0000 RST_00: ;Hardware Restart - ld sp, STACK_RAM_TOP - di - jp mon_start_init_sound + jp BOOT_PHASE0 org 0x0008 RST_08 ;Print Char @@ -35,12 +48,16 @@ RST_10 ;receive char RST_18 ;Buffer length jp EXEC_RST_18 - +;================================================================ +; Default interrupt vectors +;================================================================ INT_VEC: org 0x0044 ;DEFW EXEC_INT_VDP -;memory var template +;================================================================ +; Memory layout +;================================================================ mon_var_template: phase SYS_RAM_START @@ -60,73 +77,54 @@ var_curserchar: defb 0 var_curserlastaddr: defw 0 +var_pio_present: + defb 0 +var_apu_present: + defb 0 var_scratch: defs 16 ;16 bytes space for scratch vars var_ps2mem: defs 16 ;16 bytes space for scratch vars var_buffer: defb 0 ;var lentgh +var_idebuffer: + defs 768 dephase mon_var_template_end: nop -;end memory var template + +;================================================================ +; Start of monitor +;================================================================ org 0x0050 -mon_start_init_sound: - ;CALL BTLDR_ENTRY ;call bootloader first - ;ld D,0x08 ; Select register #8 - ;ld A,0x00 ; Volume channel A 0 - ;call AY0_WRITE_REG - ;ld D,0x09 ; Select register #9 - ;ld A,0x00 ; Volume channel B 0 - ;call AY0_WRITE_REG - ;ld D,0x0A ; Select register #10 - ;ld A,0x00 ; Volume channel C 0 - ;call AY0_WRITE_REG - -mon_start_init_ctc: - - ; Set CTC Ch2 Interrupt Vector - ;LD A,40h ; it vector defined in bit 7­3,bit 2­1 don't care, bit 0 = 0 - ;OUT (IO_CTC0_C0),A - ; Init CTC Channel 2 - ;LD A,10100111b - ;OUT (IO_CTC0_C2),A - ;LD A,0x34 ; 55Hz ISR - ;LD A,0xFF ; 55Hz ISR - ;OUT (IO_CTC0_C2),A - - ;INIT PIO +BOOT_PHASE0: ;Setup Hardware + ;Setup Stack-Pointer + ld sp, STACK_RAM_TOP + ;Disable Interrupts + di + ;Setup PIO on MIO Board LD A,0xCF OUT (CS_PIO_AC), A - LD A,11110101b + LD A,11110111b ;All pins inputs except speaker OUT (CS_PIO_AC), A + LD A,00000011B ;Preset I2C pins to high + OUT (CS_PIO_AC), A - - xor a - ;ld i, a - ;im 2 ;set int mode 2 - + ;Set variables ld (var_curserstate),a ld (var_curseron),a ld a, " " ld (var_curserchar),a - - - - ;ei ; Enable Interrupts - - ;jr mon_start_ram ;skip serial, cause not used atm -mon_start_init_serial: + ;Initialize Console (Serial-Port) call CONSOLE_INIT - ;jp mon_start_complete -mon_start_ram: +BOOT_PHASE1: ;Copy default values to RAM ld hl,mon_var_template ld de,mon_var_template_end ld bc,SYS_RAM_START -mon_start_ram_loop: +BOOT_PHASE1_LOOP: ld a,(hl) ;copy values ld (bc),a inc hl @@ -134,379 +132,54 @@ mon_start_ram_loop: push hl ;check if end is reached sbc hl,de pop hl - jp nz, mon_start_ram_loop + jp nz, BOOT_PHASE1_LOOP ;template copy done -mon_start_complete: - - ;call keyboard_init_io - ;call vdpconsole_init - - ;call print_str - - - ;jp splash_run - - ;jp ps2demo_run - ;call debug_init - ;call vdp_cursor_on - ;jp COLD - +BOOT_PHASE2: ;Hardware initialized. + ; Print banner call print_clear ld hl, [STR_Banner_Start] call print_str - call ideif_init_drive + ; Power-On Self Tests + call POST_START + ; Detect IDE drives + call ideif_init_all + + ; Beep after start LD DE,0x40 + LD BC,0x48 CALL beep - ;call vdp_cursor_on - call PROMPT_BEGIN + ; Start commandline + jp COMMAND - ;halt CPU if prompt exits + ; This instruction should never be reached halt - -; Misc Functions -AY0_WRITE_REG: - LD B,A - LD A,D - OUT (IO_AY0_ADDR),A - LD A,B - OUT (IO_AY0_DATA),A - RET - -PROMPT_BEGIN: - call print_newLine - ;call A_RTS_ON - ld a,'>' - call print_char - xor a ;reset buffer len - ld (var_buffer_len),a - -PROMPT_BEGIN_READ_LOOP: - call read_char - ;call keybd_read_ascii - jp z, PROMPT_BEGIN_READ_LOOP ; wait until char avail - push af - pop af - ; process special ops - cp 13 ; enter - jp z,PROMPT_BEGIN_READ_PROCESS - cp 10 - jp z, PROMPT_BEGIN_READ_LOOP; skip LF for file load - cp 0x08 ; backspace 0x08 VT102 0x7f Putty - jp z,PROMPT_BEGIN_READ_BACKSPACE - - push af - ; a contains latest char - ld hl,[var_buffer] - ld d,0 - ld a,(var_buffer_len) - ld e,a - add hl,de ;hl now contains pointer to last position in buffer - inc a - ld (var_buffer_len),a ;store incremented buffer length - - pop af - ld (hl),a - call print_char - inc hl - xor a ;a = 0 - ld (hl),a ;always add null termination after last char - jp PROMPT_BEGIN_READ_LOOP - -PROMPT_BEGIN_READ_BACKSPACE: - ld a,(var_buffer_len) - and a - jp z, PROMPT_BEGIN_READ_LOOP ; do not continue if already at char 0 - dec a ;decrement length - ld (var_buffer_len),a ;and store it - ld e,a ;load de with decremented value - ld d,0 - ld hl,[var_buffer] - add hl,de ;hl now contains pointer to last position in buffer - xor a ; store null byte to current location - ld (hl),a - ;call print_delete - ld a, 0x08 - call print_char - ld a, 0x20 - call print_char - ld a, 0x08 - call print_char - jp PROMPT_BEGIN_READ_LOOP - -PROMPT_BEGIN_READ_PROCESS: - ;call print_newLine - ;ld hl,var_buffer - ;call print_str - - ld a,([var_buffer]) - cp '$' ;jump to addr - jp z, CMD_EXEC - cp '?' ;print hexdump - jp z, CMD_VIEW - cp '!' ;set memory - jp z, CMD_SET - cp 'i' ;in IO - jp z, CMD_IO_READ - cp 'o' ;out IO - jp z, CMD_IO_WRITE - cp 'd' ;disassemble - jp z, CMD_DASM - cp 'x' ;start xmodem - jp z, xmodem_init - - - call print_newLine - ld hl, [STR_Unknown] - call print_str - jp PROMPT_BEGIN - - ret - -CMD_EXEC: - xor a ;write null byte to buffer pos 0 to prevent reexecute the last command - ld (var_buffer),a - - ld hl,var_buffer+1 ;load 1st byte - call DHEX_TO_BYTE - ld b,a ;store result in b - ld a,e ;check for error - and a - jp nz, CMD_SYNTAX_ERROR - - ld hl,var_buffer+3 ;load 2nd byte - call DHEX_TO_BYTE - ld c,a - ld a,e ;check for error - and a - jp nz, CMD_SYNTAX_ERROR - - ld h,b - ld l,c - jp (hl) - -CMD_VIEW: - call print_newLine - ld hl,var_buffer+1 ;load 1st byte - call DHEX_TO_BYTE - ld b,a ;store result in b - ld a,e ;check for error - and a - jp nz, CMD_SYNTAX_ERROR - - ld hl,var_buffer+3 ;load 2nd byte - call DHEX_TO_BYTE - ld c,a - ld a,e ;check for error - and a - jp nz, CMD_SYNTAX_ERROR - - - ld a,(var_buffer+5) - cp ' ' - jp nz, CMD_SYNTAX_ERROR - - ld hl,var_buffer+6 ;load length - call DHEX_TO_BYTE - push af - ld a,e ;check for error - and a - jp nz, CMD_SYNTAX_ERROR - - ;draw header - ld hl,[STR_HEXDUMP_HEADER] - call print_str - - pop af - ;loading vars done. display results - ld h, b ;pointer to current byte - ld l, c ;pointer to current byte - ld b, a ;bytes counter - - ;draw row -CMD_VIEW_ROW: - call print_newLine - ld a,h ;print start - call print_a_hex - ld a,l - call print_a_hex - ld a, ' ' - call print_char - ld c, 16 ;column counter -CMD_VIEW_ROW_LOOP: - ld a,(hl) - call print_a_hex - - inc hl ;increment pointer - dec b ;decrement byte counter - dec c ;decrement column counter - - ld a,b - and a - jp z,CMD_VIEW_END ;if byte counter = 0 -> end reached - - ld a,c - and a - jp z,CMD_VIEW_ROW ;else if column counter = 0 -> 16 chars printed. next row - - ld a, ' ' - call print_char - jp CMD_VIEW_ROW_LOOP ;else -CMD_VIEW_END: - call print_newLine - jp PROMPT_BEGIN - -CMD_SET: - ld hl,var_buffer+1 ;load 1st byte - call DHEX_TO_BYTE - ld b,a ;store result in b - ld a,e ;check for error - and a - jp nz, CMD_SYNTAX_ERROR - - ld hl,var_buffer+3 ;load 2nd byte - call DHEX_TO_BYTE - ld c,a - ld a,e ;check for error - and a - jp nz, CMD_SYNTAX_ERROR - ;bc now contains the start address - - ld hl,var_buffer+5 -CMD_SET_LOOP: - ld a,(hl) - cp 0 ;if 0 then end - jp z, CMD_SET_END - cp ' ' - jp nz, CMD_SYNTAX_ERROR - inc hl ;next byte - call DHEX_TO_BYTE - ld (bc),a ;load byte to - ld a,e - and a - jp nz, CMD_SYNTAX_ERROR - inc bc - inc hl - inc hl - jp CMD_SET_LOOP -CMD_SET_END: - call print_newLine - jp PROMPT_BEGIN - - -CMD_IO_WRITE: - ld hl,var_buffer+1 ;load 1st byte - call DHEX_TO_BYTE - ld c,a ;store result in b - ld a,e ;check for error - and a - jp nz, CMD_SYNTAX_ERROR - - ld a,(var_buffer+3) - cp ' ' - jp nz, CMD_SYNTAX_ERROR - - ld hl,var_buffer+4 ;load 1st byte - call DHEX_TO_BYTE - push af - ld a,e ;check for error - and a - jp nz, CMD_SYNTAX_ERROR - - pop af - out (c),a - call print_newLine - jp PROMPT_BEGIN - -CMD_IO_READ: - ld hl,var_buffer+1 ;load 1st byte - call DHEX_TO_BYTE - ld c,a ;store result in b - ld a,e ;check for error - and a - jp nz, CMD_SYNTAX_ERROR - - in a,(c) - push af - call print_newLine - pop af - call print_a_hex - call print_newLine - jp PROMPT_BEGIN - -CMD_DASM: - call print_newLine - ld hl,var_buffer+1 ;load 1st byte - call DHEX_TO_BYTE - ld b,a ;store result in b - ld a,e ;check for error - and a - jp nz, CMD_SYNTAX_ERROR - - ld hl,var_buffer+3 ;load 2nd byte - call DHEX_TO_BYTE - ld c,a - ld a,e ;check for error - and a - jp nz, CMD_SYNTAX_ERROR - - - ld a,(var_buffer+5) - cp ' ' - jp nz, CMD_SYNTAX_ERROR - - ld hl,var_buffer+6 ;load length - call DHEX_TO_BYTE - push af - ld a,e ;check for error - and a - jp nz, CMD_SYNTAX_ERROR - - ld h,b - ld l,c - - pop af ;restore af - ld b,a - - call disassemble - - - jp PROMPT_BEGIN - -CMD_SYNTAX_ERROR: - call print_newLine - ld hl, [STR_SyntaxError] - call print_str - jp PROMPT_BEGIN - - - -Includes: -;.include "bootldr.s" + +;================================================================ +; Includes (2/2) +;================================================================ .include "console.s" .include "conversions.s" -;.include "basic.s" .include "disassembler.s" .include "disassembler_table.s" .include "rst.s" .include "beep.s" -.include "xmodem.s" .include "kdrv_ide8255.s" ;include ide interface driver. .include "kdrv_ideif.s" ;include ide driver. -.include "prettydump.s" ;include monitor symbols. +.include "kdrv_siic.s" +.include "prettydump.s" +.include "command.s" +.include "cmd_mem.s" +.include "cmd_io.s" +.include "cmd_date.s" +.include "cmd_disk.s" +.include "post.s" + +;================================================================ ; Strings +;================================================================ STR_Banner_Start: - db "Z8C Monitor V2 by Dennis Gunia (2022)",0 -STR_SyntaxError: - db "syn?",0 -STR_Unknown: - db "cmd?",0 -STR_HEXDUMP_HEADER: - db 'BASE 0 1 2 3 4 5 6 7 8 9 A B C D E F',0 - - - -;.include "debug.s" \ No newline at end of file + db "Z8C Monitor V2.1 by Dennis Gunia (2022-2024)",0 diff --git a/OperatingSystem/monitor_v2/zout/main.bin b/OperatingSystem/monitor_v2/zout/main.bin index 349b9f9..91b2e3e 100644 Binary files a/OperatingSystem/monitor_v2/zout/main.bin and b/OperatingSystem/monitor_v2/zout/main.bin differ diff --git a/OperatingSystem/monitor_v2/zout/main.hex b/OperatingSystem/monitor_v2/zout/main.hex index f8548f7..4326406 100644 --- a/OperatingSystem/monitor_v2/zout/main.hex +++ b/OperatingSystem/monitor_v2/zout/main.hex @@ -1,320 +1,541 @@ -:0700000031FFFFF3C35000C4 -:03000800C3C40E60 -:03001000C3C80E54 -:03001800C3D40E40 +:03000000C35000EA +:03000800C3040D21 +:03001000C3080D15 +:03001800C3140D01 :1000440000000000000000000000000000000000AC :10005400000000000000000000000000000000009C -:0B006400000000000000000000000091 -:100050003ECFD3F63EF5D3F6AF3204403205403EF4 -:1000600020320640CD7E02214400116E0001004086 -:100070007E022303E5ED52E1C27000CDCA02216089 -:1000800013CDBF02CDF411114000CDD70ECD990094 -:1000900076477AD34078D341C9CDD1023E3ECDB721 -:1000A00002AF320040CDF802CAA500F5F1FE0DCA3C -:1000B000FC00FE0ACAA500FE08CAD600F5212940A8 -:1000C00016003A00405F193C320040F177CDB7028C -:1000D00023AF77C3A5003A0040A7CAA5003D320070 -:1000E000405F160021294019AF773E08CDB7023E88 -:1000F00020CDB7023E08CDB702C3A5003A2940FE85 -:1001000024CA2F01FE3FCA4E01FE21CAB801FE6972 -:10011000CA1D02FE6FCAF401FE64CA3902FE78CA23 -:10012000060FCDD102218B13CDBF02C39900C9AFF9 -:10013000322940212A40CD2403477BA7C2720221E5 -:100140002C40CD24034F7BA7C272026069E9CDD158 -:1001500002212A40CD2403477BA7C27202212C40F2 -:10016000CD24034F7BA7C272023A2E40FE20C272FA -:1001700002212F40CD2403F57BA7C27202219013E8 -:10018000CDBF02F1606947CDD1027CCDE7027DCDC4 -:10019000E7023E20CDB7020E107ECDE70223050D0B -:1001A00078A7CAB20179A7CA87013E20CDB702C39A -:1001B0009901CDD102C39900212A40CD2403477B68 -:1001C000A7C27202212C40CD24034F7BA7C272022A -:1001D000212E407EFE00CAEE01FE20C2720223CD17 -:1001E0002403027BA7C27202032323C3D301CDD110 -:1001F00002C39900212A40CD24034F7BA7C272027B -:100200003A2C40FE20C27202212D40CD2403F57B02 -:10021000A7C27202F1ED79CDD102C39900212A4023 -:10022000CD24034F7BA7C27202ED78F5CDD102F148 -:10023000CDE702CDD102C39900CDD102212A40CD14 -:100240002403477BA7C27202212C40CD24034F7B9D -:10025000A7C272023A2E40FE20C27202212F40CD68 -:100260002403F57BA7C272026069F147CD7503C311 -:100270009900CDD102218613CDBF02C399003E4F14 -:10028000D304DB01D3043E30D3093E18D3093E0426 -:10029000D3093E44D3093E05D3093EE8D3093E01C4 -:1002A000D3093E04D3093E02D3093E00D3093E03DD -:1002B000D3093EC1D309C9F5D308CDDC02F1C97E0B -:1002C000B72806CDB7022318F6C9210A03CDBF020D -:1002D000C93E0ACDB7023E0DCDB702C9973CD3093E -:1002E000DB09CB4728F6C9F5C5D5CD5B0378CDB77B -:1002F0000279CDB702D1C1F1CD1B0300AFD309DB29 -:1003000009E601CD1203C8DB08C91B5B324A1B5B3F -:1003100048003E05D3093E68D309C93E05D3093ECE -:10032000EAD309C9E57ECD44033815CB27CB27CBCB -:1003300027CB2757237ECD44033805B2E11E00C9E1 -:100340001EFFE1C9D630EA5903FE0A3805D607EA8E -:100350005903FE103003E60FC937C9F51F1F1F1FD1 -:10036000CD6A0347F1CD6A034FC9E60FC630FE3AA6 -:10037000D8C607C9C978321A412210417E321441C9 -:10038000237E3215412BCD690478B1CA4B04ED436D -:100390001241030303030A321641030A5F030A579B -:1003A000ED531741030A3219412A1041CDB1043AE5 -:1003B0001641472A10417ECDE7022310F93E68CD51 -:1003C000B7023A1641473E0690473E20CDB7023E5F -:1003D00020CDB70210F43E20CDB702E52A1741CD5B -:1003E000BF023A1941B7CA48042A1241010800095C -:1003F0003A1941477EFE01CCD704FE02CCFE04FE32 -:1004000003CC1B05FE04CC5705FE05CC6D05FE068E -:10041000CC7A05FE07CC9405FE08CCA105FE09CCDC -:10042000B605FE10CCCB05FE11CCDB05FE12CCE3ED -:1004300005FE13CC1B06FE0ACCAD05FE80CC3A06A9 -:10044000FE81CC31062310ACE11810CDB1047ECD75 -:10045000C90423E521860ECDBF02E1CDD1023A1AAF -:10046000413D321A41C27903C9E52184063A14415B -:100470004F7EFEFFCAAB04F523462B79A04FF1B99E -:10048000280B06000E07097E4F092318E023234E90 -:10049000233A154146A0B92B2B2B280B06000E073B -:1004A000097E4F092318C6444DE1C906000E00E13C -:1004B000C93E24CDB7027CCDE7027DCDE7023E6880 -:1004C000CDB7023E20CDB702C9CDE7023E68CDB719 -:1004D000023E20CDB702C9E5ED5B1041131A6F1340 -:1004E0001A673E24CDB7027CCDE7027DCDE7023E00 -:1004F00068CDB7023E20CDB702CD7506E1C9C5ED86 -:100500005B10411A1F1FE60EE5218F0E06004F09F2 -:10051000CDBF023E20CDB702E1C1C9ED5B10411352 -:100520001AF5E680C23C053E24CDB7023E2BCDB77E -:1005300002F1CDE7023E68CDB70218173E24CDB7D1 -:10054000023E2DCDB702F1ED44CDE7023E68CDB7B6 -:10055000021800CD7506C9ED5B1041131AFE4D2837 -:10056000063E4ECDB702C93E49CDB702C9C5ED5BC7 -:1005700010411AE638CDC904C1C9C5ED5B10411A56 -:100580001F1F1FE607CD50063E20CDB7023E2CCDE3 -:10059000B702C1C9C5ED5B10411AE607CD5006C1CF -:1005A000C9C5ED5B1041131ACDC904C1C9E5ED5BA6 -:1005B000104113131806E5ED5B1041131A6F131A5F -:1005C000677CCDE7027DCDE702E1C9C5ED5B104157 -:1005D0001A1F1F1FE607CD5006C1C9E5C5ED5B1008 -:1005E000411807E5C5ED5B1041131A1F1F1FE606F2 -:1005F000F52A10417EFEDD2809FEFD280A219F0E06 -:10060000180821A70E180321AF0EF106004F097E2E -:10061000CDB702237ECDB702C1E1C9E5C5ED5B10C0 -:10062000411A1F1F1FE606F52A10417E21B70E183A -:10063000D9E5C52A174106021807E5C52A1741065C -:10064000017E23A720FB05C24106CDBF02C1E1C93F -:10065000E5FE062811FE072815219F0E06004F090A -:100660007ECDB702E1C921BF0ECDBF02E1C93E4137 -:10067000CDB702E1C978FE01C83E20CDB7023E2CBD -:10068000CDB702C900FF000001DC0A0027FF00000F -:1006900001A70B002FFF000001AB0B00EDFF44FF93 -:1006A00002AF0B003FFF000001B30B0037FF00005B -:1006B00001B70B0076FF000001BB0B00F3FF000049 -:1006C00001C00B00FBFF000001C30B00EDFF46FF64 -:1006D00002C60B00EDFF56FF02CB0B00EDFF5EFFE5 -:1006E00002D00B00EBFF000001D50B0008FF00005B -:1006F00001DF0B00D9FF000001EC0B00E3FF00005D -:1007000001F00B00DDFFE3FF02FC0B00FDFFE3FF48 -:1007100002080C00EDFFA0FF02140C00EDFFB0FF7B -:1007200002180C00EDFFA8FF021D0C00EDFFB8FF42 -:1007300002210C00EDFFA1FF02260C00EDFFB1FF2E -:10074000022A0C00EDFFA9FF022F0C00EDFFB9FFFC -:1007500002330C00C3FF000003E00A0101C2C7001E -:100760000003E00A0302800118FF000002E70A010B -:100770000338FF000002EB0A010330FF000002F221 -:100780000A010328FF000002FA0A010320FF00000B -:1007900002010B0103E9FF000002090B00DDFFE984 -:1007A000FF02120B00FDFFE9FF021B0B0010FF0010 -:1007B0000002240B0103CDFF0000032A0B0101C43A -:1007C000C70000032A0B020201C9FF000001300B21 -:1007D00000C0C7000001300B0102EDFF4DFF0235E4 -:1007E0000B00EDFF45FF023A0B00C7C70000013FB9 -:1007F0000B01050AFF000001440B001AFF00000175 -:100800004E0B003AFF000003580B02098002FF0064 -:100810000001620B0012FF0000016D0B0032FF00AF -:100820000003780B020980EDFF57FF02870B00EDF4 -:10083000FF5FFF028F0B00EDFF47FF02970B00EDFC -:10084000FF4FFF029F0B0006C7000002830B02064A -:100850000840C0000001830B02060780F800000179 -:10086000380C0107C6FF000002380C0108DDFF86C6 -:10087000FF03400C020880FDFF86FF034F0C0208B7 -:1008800080C8F80000015E0C01078EF80000025ECF -:100890000C0108DDFF8EFF03660C020880FDFF8E51 -:1008A000FF03750C02088090F8000001840C01071A -:1008B000D6FF000002840C0108DDFF96FF03890CBF -:1008C000020880FDFF96FF03950C02088094F80053 -:1008D0000001A10C0107DEFF000002A10C0108DDF0 -:1008E000FF9EFF03A90C020880FDFF9EFF03B70CCB -:1008F000020880A0F8000001C50C0107E6FF000017 -:1009000002C50C0108DDFFA6FF03CA0C020880FD2A -:10091000FFA6FF03D60C020880B0F8000001E20C2D -:100920000107F6FF000002E20C0108DDFFB6FF033D -:10093000E60C020880FDFFB6FF03F10C020880A858 -:10094000F8000001FC0C0107EEFF000002FC0C01A6 -:1009500008DDFFAEFF03010D020880FDFFAEFF03BF -:100960000D0D020880B8F8000001190D0107FEFF07 -:10097000000002190D0108DDFFBEFF031D0D020876 -:1009800080FDFFBEFF03280D02088004C7000001A0 -:10099000330D0110DDFF34FF03380D020880FDFF29 -:1009A00034FF03440D02088005C7000001500D010B -:1009B00010DDFF35FF03550D020880FDFF35FF03F5 -:1009C000610D02088009CF0000016D0D0111EDFFDE -:1009D0004ACF02760D0112EDFF42CF027F0D0112C8 -:1009E000DDFF09CF02880D0112FDFF09CF02910D35 -:1009F000011203CF0000019A0D0111DDFF23FF0258 -:100A00009F0D00FDFF23FF02A80D000BCF0000018A -:100A1000B10D0111DDFF2BFF02B60D00FDFF2BFF15 -:100A200002BF0D0001CF000003C80D03118009DDD6 -:100A3000FF21FF04CF0D010AFDFF21FF04D70D01A7 -:100A40000A2AFF000003DF0D020980EDFF4BCF04EF -:100A5000EB0D0412800A81DDFF2AFF04F60D010A66 -:100A6000FDFF2AFF04020E010A22FF0000030E0E02 -:100A7000020A80EDFF43CF041A0E030A8012DDFF45 -:100A800022CF04240E020A80FDFF22CF04300E0282 -:100A90000A80F9FF0000013C0E00DDFFF9FF02466D -:100AA0000E00FDFFF9FF02500E00C5CF0000015AF5 -:100AB0000E0113DDFFE5FF02600E00FDFFE5FF0202 -:100AC000680E00C1CF000001700E0113DDFFE1FFD1 -:100AD00002760E00FDFFE1FF027E0E004E4F500039 -:100AE0004A5020002C20004A5220004A5220432C19 -:100AF00020004A52204E432C20004A52205A2C20DB -:100B0000004A52204E5A2C20004A502028484C2996 -:100B100020004A50202849582920004A50202849BE -:100B200059292000444A4E5A200043414C4C200091 -:100B3000524554200052455449005245544E0052EB -:100B4000535420004C4420412C28424329004C445B -:100B500020412C28444529004C4420412C28006881 -:100B600029004C4420284243292C2041004C442099 -:100B7000284445292C2041004C4420280068292C79 -:100B80002041004C4420004C4420412C2049004C82 -:100B90004420412C2052004C4420492C2041004C40 -:100BA0004420522C2041004441410043504C004E0F -:100BB000454700434346005343460048414C5400D8 -:100BC000444900454900494D203000494D2031003D -:100BD000494D20320045582044452C20484C0045C2 -:100BE000582041462C204146E280B200455858002A -:100BF000455820285350292C20484C00455820287F -:100C00005350292C20495800455820285350292C4E -:100C1000204959004C4449004C444952004C44443A -:100C2000004C444452004350490043504952004351 -:100C3000504400435044520041444420412C200081 -:100C400041444420412C202849582B006829004168 -:100C5000444420412C202849592B00682900414454 -:100C60004320412C200041444320412C2028495856 -:100C70002B0068290041444320412C202849592B4E -:100C800000682900535542200053554220284958F6 -:100C90002B00682900535542202849592B00682908 -:100CA0000053424320412C200053424320412C2832 -:100CB00049582B0068290053424320412C284959A8 -:100CC0002B00682900414E442000414E4420284911 -:100CD000582B00682900414E44202849592B0068B0 -:100CE00029004F5220004F52202849582B006829D4 -:100CF000004F52202849592B00682900584F522094 -:100D000000584F52202849582B00682900584F524C -:100D1000202849592B0068290043502000435020C7 -:100D20002849582B006829004350202849592B0096 -:100D3000682900494E432000494E43202849582B3A -:100D400000682900494E43202849592B0068290092 -:100D50004445432000444543202849582B00682936 -:100D600000444543202849592B0068290041444448 -:100D700020484C2C200041444320484C2C20005358 -:100D8000424320484C2C20004144442049582C2008 -:100D9000004144442049592C2000494E4320004939 -:100DA0004E432049582C2000494E432049592C20BD -:100DB0000044454320004445432049582C2000442A -:100DC00045432049592C20004C4420002C20004C45 -:100DD000442049582C20004C442049592C20004CD8 -:100DE0004420484C2C2028006829004C4420002C2A -:100DF0002028006829004C442049582C20280068ED -:100E000029004C442049592C2028006829004C44D2 -:100E100020280068292C20484C004C4420280068D9 -:100E2000292C20004C4420280068292C20495800F7 -:100E30004C4420280068292C204959004C44205358 -:100E4000502C20484C004C442053502C2049580032 -:100E50004C442053502C20495900505553482000F1 -:100E6000505553482049580050555348204959007F -:100E7000505553482000505553482049580050556C -:100E80005348204959002E3F2E0020202020004E9C -:100E90005A5A004E434300504F504550004D0042B7 -:100EA000434445484C5350424344454958535042AB -:100EB0004344454959535042434445484C414628D0 -:100EC000484C2900CDB702C9C5D5E5CDF802F5F1EA -:100ED000E1D1C1C93E00C9F5C5D53E08D3F401280A -:100EE00000CDF70E3E00D3F4012400CDF70E1B7A9F -:100EF000B320E7D1C1F1C9ED44ED44ED44ED440B1D -:100F000079B0C2F70EC9CD12033EA7D3063E0ED369 -:100F1000063E00D30421E60F22044221000022FCF9 -:100F20004022FE403E42ED47ED5E216110CDBF0202 -:100F3000FBCD97103E43CD3710CD0A10DA340FFEAB -:100F400004CA9D0FFE18CA340FFE01CA510FC3A573 -:100F50000FCD0A10DA89104732FB40CD0A10DA892A -:100F60001080FEFFC2A50F3D781FE67F67783D0F1A -:100F7000E6806F1100441906800E00E5CD0A10DAF4 -:100F80008910E177230C05C27B0FCD0A10DA891096 -:100F9000570CCD0A10DA89105F0CC37B103E06CDCA -:100FA0003710C3DF0F3E18CD37103E18CD37103E37 -:100FB00018CD37103E18CD37103E18CD37103E18DB -:100FC000CD37103E18CD37103E18CD37103E18CD16 -:100FD00037103E18CD37103E18214810CDBF02F310 -:100FE000CDD102C39900F308D92AFC402322FC404A -:100FF000110404ED52C2051021000022FC402AFE1B -:10100000402322FE4008D9FBED4DF321000022FCD5 -:101010004022FE40FBCD1B032AFE407DFE03CA3565 -:1010200010AFD309DB09E601CA1810DB08F5CD12B1 -:1010300003F1373FC937C9D308CD3D10C9973CD319 -:1010400009DB09CB4728F6C94572726F723A2075E1 -:101050006E657870656374656420627974650D0AE5 -:1010600000417761697420786D6F64656D20636FEE -:101070006E6E656374696F6E0D0A003E06CD3710A3 -:10108000CD0A10DA7B10C33F0F3E15CD3710CD0AC5 -:1010900010DA8910C33F0F21FF000101000000009A -:1010A00000ED42C818F73E80D3333E80D33200AF04 -:1010B000D332C9F53E80D333F1D33078E61FD33233 -:1010C000F620D3320078E61FD33200AFD332C93EC8 -:1010D00092D33378E61FD332F640D33200F5F1F5E0 -:1010E000F1F5F1F5F1DB30F5AFD332F1C90EFF06C2 -:1010F0000FCDCF10CB47C26E11CB5F28F23E92D3FB -:10110000333E08D332F640D332000000DB31772380 -:10111000DB30772379B7CA1C110D18D3C90EFF1124 -:1011200000101B7AB3CA5811060FCDCF10CB47C29F -:101130006E11CB5F28EC1100083E92D3333E08D3EA -:1011400032F640D332000000DB307723DB317723E7 -:1011500079B7CA1C110D18CA21D011CDBF0279CDA3 -:10116000E7023E0ACDB7023E0DCDB702C9C921A1A3 -:1011700011CDBF02060FCDCF10CDE70221BE11CD9C -:10118000BF023A0050CDE70221C711CDBF020609C8 -:10119000CDCF10CDE7023E0ACDB7023E0DCDB7024E -:1011A000C90D0A4469736B20492F4F206572726F15 -:1011B000722E205374617475733A20307800204485 -:1011C00065763A20307800204572723A20307800F7 -:1011D0000D0A4469736B20492F4F206572726F723C -:1011E0002E20446174612074696D656F75742040B0 -:1011F00020307800AF320050320150F3CDA61021DC -:101200008912CDBF0211FF1F060FCDCF10B7280BDB -:10121000CB77200E1B7AB3280218ED21B312CDBF75 -:1012200002C9219D12CDBF02060F3EECCDB31021A5 -:101230004150CDED102155500614CD581321AA125E -:10124000CDBF022177500628CD58133E0ACDB702F4 -:101250003E0DCDB702C9060ACDB3107EE60FF6E00B -:10126000060ECDB310237E060DCDB310237E060CE3 -:10127000CDB310237E060BCDB310233E20060FCD39 -:10128000B310214150CD1D11C90D0A446574656329 -:1012900074696E67206472697665732000666F7585 -:1012A0006E64210D0A49443A20002020446573638E -:1012B0003A20006E6F2064726976650D0A00E521A0 -:1012C0001913CDBF02E178B7CA1813050E107CCDF3 -:1012D000E7027DCDE7023E20CDB7027ECDE7023E9C -:1012E00020CDB702230D20F3C5E506000E10ED4218 -:1012F0007E23FE20DA0113FE7FD20113CDB7021840 -:10130000053E2ECDB7020DC2F012E1C13E0ACDB7A7 -:10131000023E0DCDB70218AEC90D0A424153452019 -:10132000302020312020322020332020342020354E -:10133000202036202037202038202039202041202E -:1013400020422020432020442020452020462020E9 -:1013500041534349490D0A007E23CDB70210F9C914 -:101360005A3843204D6F6E69746F72205632206276 -:10137000792044656E6E69732047756E6961202817 -:1013800032303232290073796E3F00636D643F0062 -:10139000424153452030202031202032202033206C -:1013A00020342020352020362020372020382020CF -:1013B0003920204120204220204320204420204565 -:0413C00020204600A3 +:10006400000000000000000000000000000000008C +:10007400000000000000000000000000000000007C +:10008400000000000000000000000000000000006C +:10009400000000000000000000000000000000005C +:1000A400000000000000000000000000000000004C +:1000B400000000000000000000000000000000003C +:1000C400000000000000000000000000000000002C +:1000D400000000000000000000000000000000001C +:1000E400000000000000000000000000000000000C +:1000F40000000000000000000000000000000000FC +:1001040000000000000000000000000000000000EB +:1001140000000000000000000000000000000000DB +:1001240000000000000000000000000000000000CB +:1001340000000000000000000000000000000000BB +:1001440000000000000000000000000000000000AB +:10015400000000000000000000000000000000009B +:10016400000000000000000000000000000000008B +:10017400000000000000000000000000000000007B +:10018400000000000000000000000000000000006B +:10019400000000000000000000000000000000005B +:1001A400000000000000000000000000000000004B +:1001B400000000000000000000000000000000003B +:1001C400000000000000000000000000000000002B +:1001D400000000000000000000000000000000001B +:1001E400000000000000000000000000000000000B +:1001F40000000000000000000000000000000000FB +:1002040000000000000000000000000000000000EA +:1002140000000000000000000000000000000000DA +:1002240000000000000000000000000000000000CA +:1002340000000000000000000000000000000000BA +:1002440000000000000000000000000000000000AA +:10025400000000000000000000000000000000009A +:10026400000000000000000000000000000000008A +:10027400000000000000000000000000000000007A +:10028400000000000000000000000000000000006A +:10029400000000000000000000000000000000005A +:1002A400000000000000000000000000000000004A +:1002B400000000000000000000000000000000003A +:1002C400000000000000000000000000000000002A +:1002D400000000000000000000000000000000001A +:1002E400000000000000000000000000000000000A +:1002F40000000000000000000000000000000000FA +:1003040000000000000000000000000000000000E9 +:1003140000000000000000000000000000000000D9 +:1003240000000000000000000000000000000000C9 +:1003340000000000000000000000000000000000B9 +:1003440000000000000000000000000000000000A9 +:100354000000000000000000000000000000000099 +:0D036400000000000000000000000000008C +:1000500031FFFFF33ECFD3F63EF7D3F63E03D3F6A0 +:100060003204403205403E20320640CD9E002144FD +:10007000001170030100407E022303E5ED52E1C24E +:100080007700CDEA00216F1ECDDF00CDDD1CCDABAA +:1000900014114000014800CD170DC3EB17763E4FF9 +:1000A000D304DB01D3043E30D3093E18D3093E0408 +:1000B000D3093E44D3093E05D3093EE8D3093E01A6 +:1000C000D3093E04D3093E02D3093E00D3093E03BF +:1000D000D3093EC1D309C9F5D308CDFC00F1C97ECF +:1000E000B72806CDD7002318F6C9214A01CDDF0075 +:1000F000C93E0ACDD7003E0DCDD700C9973CD309E4 +:10010000DB09CB4728F6C9F5C5D5CD9B0178CDD7FE +:100110000079CDD700D1C1F1C9C630CDD700C9CD46 +:100120005B0100AFD309DB09E601CD5201C8DB0852 +:10013000C9CD1F01CA3101CDD700DE30DA4701FE3B +:100140000ACA4701E60FC93EFFC91B5B324A1B5B67 +:1001500048003E05D3093E68D309C93E05D3093E90 +:10016000EAD309C9E57ECD84013815CB27CB27CB4F +:1001700027CB2757237ECD84013805B2E11E00C965 +:100180001EFFE1C9D630EA9901FE0A3805D607EA12 +:100190009901FE103003E60FC937C9F51F1F1F1F55 +:1001A000CDAA0147F1CDAA014FC9E60FC630FE3AEC +:1001B000D8C607C9C978321A412210417E3214418B +:1001C000237E3215412BCDA90278B1CA8B02ED43B3 +:1001D0001241030303030A321641030A5F030A575D +:1001E000ED531741030A3219412A1041CDF1023A69 +:1001F0001641472A10417ECD07012310F93E68CDF4 +:10020000D7003A1641473E0690473E20CDD7003EE4 +:1002100020CDD70010F43E20CDD700E52A1741CDE0 +:10022000DF003A1941B7CA88022A124101080009C1 +:100230003A1941477EFE01CC1703FE02CC3E03FE75 +:1002400003CC5B03FE04CC9703FE05CCAD03FE0696 +:10025000CCBA03FE07CCD403FE08CCE103FE09CCE4 +:10026000F603FE10CC0B04FE11CC1B04FE12CC23B3 +:1002700004FE13CC5B04FE0ACCED03FE80CC7A04B2 +:10028000FE81CC71042310ACE11810CDF1027ECDBB +:10029000090323E521C60CCDDF00E1CDF1003A1AB8 +:1002A000413D321A41C2B901C9E521C4043A1441A1 +:1002B0004F7EFEFFCAEB02F523462B79A04FF1B922 +:1002C000280B06000E07097E4F092318E023234E52 +:1002D000233A154146A0B92B2B2B280B06000E07FD +:1002E000097E4F092318C6444DE1C906000E00E1FE +:1002F000C93E24CDD7007CCD07017DCD07013E68E6 +:10030000CDD7003E20CDD700C9CD07013E68CDD75F +:10031000003E20CDD700C9E5ED5B1041131A6F13E5 +:100320001A673E24CDD7007CCD07017DCD07013E65 +:1003300068CDD7003E20CDD700CDB504E1C9C5EDCD +:100340005B10411A1F1FE60EE521CF0C06004F0976 +:10035000CDDF003E20CDD700E1C1C9ED5B104113D8 +:100360001AF5E680C27C033E24CDD7003E2BCDD7C4 +:1003700000F1CD07013E68CDD70018173E24CDD738 +:10038000003E2DCDD700F1ED44CD07013E68CDD71D +:10039000001800CDB504C9ED5B1041131AFE4D28BD +:1003A000063E4ECDD700C93E49CDD700C9C5ED5B4D +:1003B00010411AE638CD0903C1C9C5ED5B10411AD9 +:1003C0001F1F1FE607CD90043E20CDD7003E2CCD49 +:1003D000D700C1C9C5ED5B10411AE607CD9004C135 +:1003E000C9C5ED5B1041131ACD0903C1C9E5ED5B29 +:1003F000104113131806E5ED5B1041131A6F131A21 +:10040000677CCD07017DCD0701E1C9C5ED5B1041DA +:100410001A1F1F1FE607CD9004C1C9E5C5ED5B108B +:10042000411807E5C5ED5B1041131A1F1F1FE606B3 +:10043000F52A10417EFEDD2809FEFD280A21DF0C89 +:10044000180821E70C180321EF0CF106004F097E74 +:10045000CDD700237ECDD700C1E1C9E5C5ED5B1046 +:10046000411A1F1F1FE606F52A10417E21F70C18BE +:10047000D9E5C52A174106021807E5C52A1741061E +:10048000017E23A720FB05C28104CDDF00C1E1C9A5 +:10049000E5FE062811FE07281521DF0C06004F098E +:1004A0007ECDD700E1C921FF0CCDDF00E1C93E417F +:1004B000CDD700E1C978FE01C83E20CDD7003E2C43 +:1004C000CDD700C900FF0000011C090027FF000074 +:1004D00001E709002FFF000001EB0900EDFF44FFD9 +:1004E00002EF09003FFF000001F3090037FF0000A1 +:1004F00001F7090076FF000001FB0900F3FF00008F +:1005000001000A00FBFF000001030A00EDFF46FFA7 +:1005100002060A00EDFF56FF020B0A00EDFF5EFF28 +:1005200002100A00EBFF000001150A0008FF00009E +:10053000011F0A00D9FF0000012C0A00E3FF0000A0 +:1005400001300A00DDFFE3FF023C0A00FDFFE3FF8C +:1005500002480A00EDFFA0FF02540A00EDFFB0FFC1 +:1005600002580A00EDFFA8FF025D0A00EDFFB8FF88 +:1005700002610A00EDFFA1FF02660A00EDFFB1FF74 +:10058000026A0A00EDFFA9FF026F0A00EDFFB9FF42 +:1005900002730A00C3FF00000320090101C2C70063 +:1005A000000320090302800118FF0000022709014F +:1005B0000338FF0000022B09010330FF0000023264 +:1005C00009010328FF0000023A09010320FF00008F +:1005D0000241090103E9FF000002490900DDFFE9CA +:1005E000FF02520900FDFFE9FF025B090010FF0056 +:1005F000000264090103CDFF0000036A090101C480 +:10060000C70000036A09020201C9FF000001700966 +:1006100000C0C700000170090102EDFF4DFF027527 +:100620000900EDFF45FF027A0900C7C70000017FFE +:100630000901050AFF0000018409001AFF000001FA +:100640008E09003AFF000003980902098002FF00AA +:100650000001A2090012FF000001AD090032FF00F5 +:100660000003B809020980EDFF57FF02C70900ED3A +:10067000FF5FFF02CF0900EDFF47FF02D70900ED42 +:10068000FF4FFF02DF090006C7000002C309020690 +:100690000840C0000001C30902060780F8000001FD +:1006A000780A0107C6FF000002780A0108DDFF860C +:1006B000FF03800A020880FDFF86FF038F0A0208FD +:1006C00080C8F80000019E0A01078EF80000029E13 +:1006D0000A0108DDFF8EFF03A60A020880FDFF8ED7 +:1006E000FF03B50A02088090F8000001C40A010760 +:1006F000D6FF000002C40A0108DDFF96FF03C90A05 +:10070000020880FDFF96FF03D50A02088094F800D6 +:100710000001E10A0107DEFF000002E10A0108DD35 +:10072000FF9EFF03E90A020880FDFF9EFF03F70A10 +:10073000020880A0F8000001050B0107E6FF000099 +:1007400002050B0108DDFFA6FF030A0B020880FD6E +:10075000FFA6FF03160B020880B0F8000001220B71 +:100760000107F6FF000002220B0108DDFFB6FF03C0 +:10077000260B020880FDFFB6FF03310B020880A89C +:10078000F80000013C0B0107EEFF0000023C0B01EA +:1007900008DDFFAEFF03410B020880FDFFAEFF0343 +:1007A0004D0B020880B8F8000001590B0107FEFF4D +:1007B000000002590B0108DDFFBEFF035D0B0208BC +:1007C00080FDFFBEFF03680B02088004C700000124 +:1007D000730B0110DDFF34FF03780B020880FDFF6F +:1007E00034FF03840B02088005C7000001900B0151 +:1007F00010DDFF35FF03950B020880FDFF35FF0379 +:10080000A10B02088009CF000001AD0B0111EDFF23 +:100810004ACF02B60B0112EDFF42CF02BF0B01120D +:10082000DDFF09CF02C80B0112FDFF09CF02D10B7A +:10083000011203CF000001DA0B0111DDFF23FF02DB +:10084000DF0B00FDFF23FF02E80B000BCF000001D0 +:10085000F10B0111DDFF2BFF02F60B00FDFF2BFF5B +:1008600002FF0B0001CF000003080C03118009DD1B +:10087000FF21FF040F0C010AFDFF21FF04170C01EB +:100880000A2AFF0000031F0C020980EDFF4BCF0472 +:100890002B0C0412800A81DDFF2AFF04360C010AAA +:1008A000FDFF2AFF04420C010A22FF0000034E0C48 +:1008B000020A80EDFF43CF045A0C030A8012DDFFC9 +:1008C00022CF04640C020A80FDFF22CF04700C02C8 +:1008D0000A80F9FF0000017C0C00DDFFF9FF0286B1 +:1008E0000C00FDFFF9FF02900C00C5CF0000019A3B +:1008F0000C0113DDFFE5FF02A00C00FDFFE5FF0288 +:10090000A80C00C1CF000001B00C0113DDFFE1FF16 +:1009100002B60C00FDFFE1FF02BE0C004E4F50007E +:100920004A5020002C20004A5220004A5220432CDA +:1009300020004A52204E432C20004A52205A2C209C +:10094000004A52204E5A2C20004A502028484C2958 +:1009500020004A50202849582920004A5020284980 +:1009600059292000444A4E5A200043414C4C200053 +:10097000524554200052455449005245544E0052AD +:10098000535420004C4420412C28424329004C441D +:1009900020412C28444529004C4420412C28006843 +:1009A00029004C4420284243292C2041004C44205B +:1009B000284445292C2041004C4420280068292C3B +:1009C0002041004C4420004C4420412C2049004C44 +:1009D0004420412C2052004C4420492C2041004C02 +:1009E0004420522C2041004441410043504C004ED1 +:1009F000454700434346005343460048414C54009A +:100A0000444900454900494D203000494D203100FE +:100A1000494D20320045582044452C20484C004583 +:100A2000582041462C204146E280B20045585800EB +:100A3000455820285350292C20484C004558202840 +:100A40005350292C20495800455820285350292C10 +:100A5000204959004C4449004C444952004C4444FC +:100A6000004C444452004350490043504952004313 +:100A7000504400435044520041444420412C200043 +:100A800041444420412C202849582B00682900412A +:100A9000444420412C202849592B00682900414416 +:100AA0004320412C200041444320412C2028495818 +:100AB0002B0068290041444320412C202849592B10 +:100AC00000682900535542200053554220284958B8 +:100AD0002B00682900535542202849592B006829CA +:100AE0000053424320412C200053424320412C28F4 +:100AF00049582B0068290053424320412C2849596A +:100B00002B00682900414E442000414E44202849D2 +:100B1000582B00682900414E44202849592B006871 +:100B200029004F5220004F52202849582B00682995 +:100B3000004F52202849592B00682900584F522055 +:100B400000584F52202849582B00682900584F520E +:100B5000202849592B006829004350200043502089 +:100B60002849582B006829004350202849592B0058 +:100B7000682900494E432000494E43202849582BFC +:100B800000682900494E43202849592B0068290054 +:100B90004445432000444543202849582B006829F8 +:100BA00000444543202849592B006829004144440A +:100BB00020484C2C200041444320484C2C2000531A +:100BC000424320484C2C20004144442049582C20CA +:100BD000004144442049592C2000494E43200049FB +:100BE0004E432049582C2000494E432049592C207F +:100BF0000044454320004445432049582C200044EC +:100C000045432049592C20004C4420002C20004C06 +:100C1000442049582C20004C442049592C20004C99 +:100C20004420484C2C2028006829004C4420002CEB +:100C30002028006829004C442049582C20280068AE +:100C400029004C442049592C2028006829004C4494 +:100C500020280068292C20484C004C44202800689B +:100C6000292C20004C4420280068292C20495800B9 +:100C70004C4420280068292C204959004C4420531A +:100C8000502C20484C004C442053502C20495800F4 +:100C90004C442053502C20495900505553482000B3 +:100CA0005055534820495800505553482049590041 +:100CB000505553482000505553482049580050552E +:100CC0005348204959002E3F2E0020202020004E5E +:100CD0005A5A004E434300504F504550004D004279 +:100CE000434445484C53504243444549585350426D +:100CF0004344454959535042434445484C41462892 +:100D0000484C2900CDD700C9C5D5E5CD1F01F5F167 +:100D1000E1D1C1C93E00C9F5D53E08D3F4CD2F0DB0 +:100D20003E00D3F4CD2F0D1B7AB320EDD1F1C9C510 +:100D3000ED44ED440B79B0C2300DC1C93E80D333D0 +:100D40003E80D33200AFD332C9F53E80D333F1D3E6 +:100D50003078E61FD332F620D3320078E61FD33244 +:100D600000AFD332C93E92D33378E61FD332F64078 +:100D7000D33200F5F1F5F1F5F1F5F1DB30F5AFD354 +:100D800032F1C90EFF060FCD650DCB47C2040ECB65 +:100D90005F28F23E92D3333E08D332F640D332007E +:100DA0000000DB317723DB30772379B7CAB20D0D32 +:100DB00018D3C90EFF1100101B7AB3CAEE0D060F2F +:100DC000CD650DCB47C2040ECB5F28EC1100083E69 +:100DD00092D3333E08D332F640D332000000DB30EA +:100DE0007723DB31772379B7CAB20D0D18CA216694 +:100DF0000ECDDF0079CD07013E0ACDD7003E0DCDE7 +:100E0000D700C9C921370ECDDF00060FCD650DCD46 +:100E1000070121540ECDDF003A2C40CD0701215DA2 +:100E20000ECDDF000609CD650DCD07013E0ACDD7F9 +:100E3000003E0DCDD700C90D0A4469736B20492FC0 +:100E40004F206572726F722E205374617475733AFD +:100E500020307800204465763A20307800204572B2 +:100E6000723A203078000D0A4469736B20492F4F85 +:100E7000206572726F722E20446174612074696DF6 +:100E8000656F75742040203078000000000000007D +:100E90000000000000000000000000000000000052 +:100EA0000000000000000000000000000000000042 +:100EB0000000000000000000000000000000000032 +:100EC0000000000000000000000000000000000022 +:100ED0000000000000000000000000000000000012 +:100EE0000000000000000000000000000000000002 +:100EF00000000000000000000000000000000000F2 +:100F000000000000000000000000000000000000E1 +:100F100000000000000000000000000000000000D1 +:100F200000000000000000000000000000000000C1 +:100F300000000000000000000000000000000000B1 +:100F400000000000000000000000000000000000A1 +:100F50000000000000000000000000000000000091 +:100F60000000000000000000000000000000000081 +:100F70000000000000000000000000000000000071 +:100F80000000000000000000000000000000000061 +:100F90000000000000000000000000000000000051 +:100FA0000000000000000000000000000000000041 +:100FB0000000000000000000000000000000000031 +:100FC0000000000000000000000000000000000021 +:100FD0000000000000000000000000000000000011 +:100FE0000000000000000000000000000000000001 +:100FF00000000000000000000000000000000000F1 +:1010000000000000000000000000000000000000E0 +:1010100000000000000000000000000000000000D0 +:1010200000000000000000000000000000000000C0 +:1010300000000000000000000000000000000000B0 +:1010400000000000000000000000000000000000A0 +:101050000000000000000000000000000000000090 +:101060000000000000000000000000000000000080 +:101070000000000000000000000000000000000070 +:101080000000000000000000000000000000000060 +:101090000000000000000000000000000000000050 +:1010A0000000000000000000000000000000000040 +:1010B0000000000000000000000000000000000030 +:1010C0000000000000000000000000000000000020 +:1010D0000000000000000000000000000000000010 +:1010E0000000000000000000000000000000000000 +:1010F00000000000000000000000000000000000F0 +:1011000000000000000000000000000000000000DF +:1011100000000000000000000000000000000000CF +:1011200000000000000000000000000000000000BF +:1011300000000000000000000000000000000000AF +:10114000000000000000000000000000000000009F +:10115000000000000000000000000000000000008F +:10116000000000000000000000000000000000007F +:10117000000000000000000000000000000000006F +:10118000000000000000000000000000000000005F +:10119000000000000000000000000000000000004F +:1011A000000000000000000000000000000000003F +:1011B000000000000000000000000000000000002F +:1011C000000000000000000000000000000000001F +:1011D000000000000000000000000000000000000F +:1011E00000000000000000000000000000000000FF +:1011F00000000000000000000000000000000000EF +:1012000000000000000000000000000000000000DE +:1012100000000000000000000000000000000000CE +:1012200000000000000000000000000000000000BE +:1012300000000000000000000000000000000000AE +:10124000000000000000000000000000000000009E +:10125000000000000000000000000000000000008E +:10126000000000000000000000000000000000007E +:101270000000000000FF000000000000000000303F +:101280000077400000FF0000000000000000003078 +:10129000019F400000FF000000000000000000402F +:1012A00000C7400000FF00000000000000000040F8 +:1012B00001EF400000217512113640014000EDB0F1 +:1012C0003E00327640AF327740329F4032C74032E4 +:1012D000EF40C9CDF100211015CDDF0021364006C9 +:1012E000003A7640B8CAEC123E2018023E2ACDD70A +:1012F0000078C645CDD7003E3ACDD7003E20CDD7A9 +:1013000000E57EB7280EFE01280FFE022810FEFF22 +:101310002811180F214815180D2153151808215EA2 +:10132000151803216915CDDF00E1233E30CDD7002C +:101330003E78CDD7007ECD07013E20CDD70023E5F6 +:10134000DDE12323232323232323DD7E03CD070194 +:10135000DD7E02CD0701DD7E01CD0701DD7E00CD02 +:1013600007013E20CDD700DD7E07CD0701DD7E06DB +:10137000CD0701DD7E05CD0701DD7E04CD07013EF1 +:1013800020CDD7003E30CDD7003E78CDD7007ECDE2 +:1013900007013E20CDD700237EE5B7CAA413217CE8 +:1013A00015C3A713217415CDDF00E123C57E4F239C +:1013B0007E4723E56069CDDF00CDF100E1C1232345 +:1013C0000478FE04C8C3E112CD9714CD3C0D01FF93 +:1013D0005F060FCD650DB7280BCB77200C1B7AB3BA +:1013E000280218EDDD360001C9DD360002060F3E89 +:1013F000ECCD490D211741CD830D214D41DD7E0CF2 +:101400005FDD7E0D57012800EDB03E01060ACD4993 +:101410000D3E01060BCD490D3E00060CCD490D3E9B +:1014200000060DCD490D3EA0060ECD490D3E20060D +:101430000FCD490D211741CDB30D06040E00FD213E +:10144000D542FD7E04B7C25414C34C14111000FDE4 +:101450001910EFC9FD7E04DD7701FE0E20EEFD7E42 +:1014600008DD7702FD7E09DD7703FD7E0ADD770466 +:10147000FD7E0BDD7705DD360000FD7E0CDD770699 +:10148000FD7E0DDD7707FD7E0EDD7708FD7E0FDD2D +:101490007709DD360000C9F5C53A7640070707062B +:1014A000004FDD213640DD09C1F1C921F014CDDF47 +:1014B00000CDB512CDC813210815CDDF00C9060A2D +:1014C000CD490D7E060BCD490D237E060CCD490D71 +:1014D000237E060DCD490D237EE60FF6E0060ECDE8 +:1014E000490D3E20060FCD490D211741CDB30DC941 +:1014F0000D0A446574656374696E67206472697669 +:101500006573202E2E2E2000646F6E65210D0A005B +:1015100044525620537461747573202020205479EE +:101520007065204C42412020202020204C656E67B1 +:101530007468202020506F7274204D2F532020207B +:10154000204E616D650A0D00417661696C20202096 +:101550002020004E6F7420466F756E642000556E1B +:101560006B6F776E20465320004374726C2E2045BB +:10157000727220004D61737465722000536C617645 +:1015800065202000CDE61579E6FECD7C16CD1C1633 +:10159000B7C2A8157E23CD7C16CD1C16B7C2A815E0 +:1015A00010F2CDFB153E00C9CDFB153E01C905CD9E +:1015B000E61579F601CD7C16CD1C16B7C2D715CD30 +:1015C000A2167723CD421610F6CDA2167723CD5F53 +:1015D00016CDFB153E00C9CDFB153E01C93ECFD34C +:1015E000F63EF0D3F6C93ECFD3F63EFCD3F63E022C +:1015F000D3F400003E00D3F40000C93ECFD3F63E42 +:10160000FCD3F63E02D3F400003E03D3F400003EC8 +:10161000CFD3F600003EF7D3F60000C93ECFD3F695 +:101620003EFDD3F600003E00D3F40000EE02D3F4FA +:1016300000DBF40000F5E6FEEE02D3F40000F1E674 +:1016400001C93ECFD3F63EFCD3F600003E00D3F4F2 +:1016500000003E02D3F400003E00D3F40000C93E77 +:10166000CFD3F63EFCD3F600003E02D3F400003E9A +:1016700003D3F400003E02D3F40000C9C54F3ECFAF +:10168000D3F63EFCD3F60608CB113E0017D3F40088 +:1016900000EE02D3F40000EE02D3F4000010E9796A +:1016A000C1C9C53ECFD3F63EFDD3F606080E00AF46 +:1016B000D3F400003E02D3F400DBF4001FCB11AFE3 +:1016C000D3F4000010E979C1C9E5212417CDDF006A +:1016D000E178B7CA2317050E107CCD07017DCD0731 +:1016E000013E20CDD7007ECD07013E20CDD700237F +:1016F0000D20F3C5E506000E10ED427E23FE20DA34 +:101700000C17FE7FD20C17CDD70018053E2ECDD773 +:10171000000DC2FB16E1C13E0ACDD7003E0DCDD76C +:101720000018AEC90D0A4241534520302020312017 +:101730002032202033202034202035202036202045 +:1017400037202038202039202041202042202043EB +:101750002020442020452020462020415343494951 +:101760000D0A007E23CDD70010F9C96461746500AD +:10177000901A7365746461746500281C70696E202A +:1017800000A91964756D7020001819706F757420A8 +:1017900000BF1969696E2000401A696F75742000D6 +:1017A000E01963616C6C2000F818636C72008C1A8D +:1017B0006461736D200079196A702000DF187273FC +:1017C000740000006C7364736B00A11C73656C641F +:1017D000736B2000A51C2400DF186900A9196F0095 +:1017E000BF19210048193F001819FFCDF1003E3EF6 +:1017F000CDD700AF320040CD1F01CAF717FE0DCA8A +:101800004C18FE0ACAF717FE08CA2618F5212B4005 +:1018100016003A00405F193C320040F177CDD70006 +:1018200023AF77C3F7173A0040A7CAF7173D320036 +:10183000405F1600212B4019AF773E08CDD7003E00 +:1018400020CDD7003E08CDD700C3F717216B171165 +:101850002B407EFEFFCA7E181A477EB0CA87181A30 +:10186000477EA8B7CA6E187EB7CA87181805231313 +:1018700018E6237EB7C27218232323C34F1821B85A +:1018800018CDDF00C3EB17E5C1030A6F030A67CD6C +:101890009518C3EB17E921A418CDDF00C921CC1896 +:1018A000CDDF00C90A0D6E6F7420696D706C656DB7 +:1018B000656E7465640A0D000A0D696E76616C6967 +:1018C0006420636F6D6D616E640A0D000A0D696EB0 +:1018D00076616C69642073796E7461780A0D00D545 +:1018E000E1CD6401477BA7C29D182323CD64014F3E +:1018F0007BA7C29D186069E9D5E1CD6401477BA74C +:10190000C29D182323CD64014F7BA7C29D18606937 +:10191000CD1719CDF100C9E9D5E1CD6401477BA709 +:10192000C29D182323CD64014F7BA7C29D1823239A +:101930007EFE20C29D1823CD6401F57BA7C29D18B1 +:10194000F1606947CDC916C9D5E1CD6401477BA7D0 +:10195000C29D182323CD64014F7BA7C29D1823236A +:101960007EFE00C8FE20C29D1823CD6401027BA725 +:10197000C29D18032323C36019D5E1CD6401477BC1 +:10198000A7C29D182323CD64014F7BA7C29D1823B6 +:10199000237EFE20C29D1823CD6401F57BA7C29D46 +:1019A000186069F147CDB501C9D5E1CD64014F7B20 +:1019B000A7C29D18ED78F5CDF100F1CD0701C9D58D +:1019C000E1CD64014F7BA7C29D1823237EFE20C278 +:1019D0009D1823CD6401F57BA7C29D18F1ED79C94F +:1019E000D5E1CD6401320C407BA7C29D18232301B1 +:1019F0000D40AF320B407EFE00CA121AFE20C29D7F +:101A00001823CD640102033A0B403C320B402323E0 +:101A100018E4210D403A0B40473A0C404FCD841555 +:101A2000B7C2251AC9212C1ACDDF00C90A0D62756B +:101A3000732D6572726F723A206E6F2041434B00B6 +:101A4000D5E1CD64014F7BA7C29D1823237EFE20E4 +:101A5000C29D1823CD640147C57BA7C29D18210BE9 +:101A600040CDAE15C1B7C2251A217F1ACDDF0021A6 +:101A70000B407ECD07013E20CDD7002310F4C90ACC +:101A80000D7265632D627566663A2000CDEA00C965 +:101A9000CDF100214B1B06010ED0CD8415B7C22518 +:101AA0001A210B4006080ED0CDAE15B7C2251A3A42 +:101AB0000D40E6301F1F1F1FCD19013A0D40E60FE4 +:101AC000CD19013E3ACDD7003A0C40E6701F1F1FDA +:101AD0001FCD19013A0C40E60FCD19013E3ACDD782 +:101AE000003A0B40E6701F1F1F1FCD19013A0B4033 +:101AF000E60FCD19013E20CDD7003A0F40E6301F4A +:101B00001F1F1FCD19013A0F40E60FCD19013E2EC0 +:101B1000CDD7003A1040E6101F1F1F1FCD19013A04 +:101B20001040E60FCD19013E2ECDD7003E32CDD765 +:101B3000003E30CDD7003A1140E6F01F1F1F1FCDE9 +:101B400019013A1140E60FCD1901C9000A0D456E81 +:101B50007465722044617465202020202830302D67 +:101B6000333129203A20000A0D456E746572204DEC +:101B70006F6E74682020202830302D313229203AB1 +:101B800020000A0D456E746572205965617220202F +:101B900020202830302D393929203A20000A0D45DF +:101BA0006E74657220486F75727320202028303063 +:101BB0002D323329203A20000A0D456E74657220BB +:101BC0004D696E75746573202830302D35392920A4 +:101BD0003A20000A0D456E746572205365636F6E7E +:101BE0006473202830302D353929203A20002069AF +:101BF0006E7661696C6420696E7075742E20526512 +:101C00007472792100E5CDDF00E1CD3101FEFFCA1C +:101C10001D1C47CD3101FEFFCA1D1C4FC9E521EE39 +:101C20001BCDDF00E1C3051CAF320B40214C1BCDA7 +:101C3000051C78CD9C1CE630B132104021671BCDCD +:101C4000051C78CD9C1CE610B132114021821BCDC1 +:101C5000051C78CD9C1CE6F0B1321240219D1BCDB5 +:101C6000051C78CD9C1CE630B1320E4021B81BCD4E +:101C7000051C78CD9C1CE670B1320D4021D31BCDE4 +:101C8000051C78CD9C1CE670B1320C40130ED006BA +:101C900008210B40CD8415B7C2251AC907070707CD +:101CA000C9CDD312C9D5E17EDE453808FE04300423 +:101CB000CD0080C921C41CCDDF00112000017000BF +:101CC000CD170DC90A0D496E76616C696420647286 +:101CD000697665206C65747465720A0D00CDED1C23 +:101CE000CD121DCD6A1DCD3D1DCD501DC921E11D5B +:101CF000CDDF00DBF6FE00C2061D3E0032094021AA +:101D00006A1ECDDF00C93EFF32094021321ECDDF01 +:101D100000C921FC1DCDDF003EFFD3F80000DBF839 +:101D2000FEFFC2311D3E00320A40216A1ECDDF0097 +:101D3000C93EFF320A4021321ECDDF00C921AB1D52 +:101D4000CDDF00DB30B7C2631D216A1ECDDF00C9C5 +:101D500021C61DCDDF00DB40B7C2631D216A1ECD49 +:101D6000DF00C921321ECDDF00C93E06320B402103 +:101D7000171ECDDF00210B4006010ED0CD8415B714 +:101D8000C29D1D210B4006010ED0CDAE153A0B4071 +:101D9000B7CAA41D216A1ECDDF00C3931A21321ECB +:101DA000CDDF00C921401ECDDF00C90D0A436865A3 +:101DB000636B204469736B6374726C2E40303330F4 +:101DC000682E2E2E20000D0A436865636B2044693F +:101DD000736B6374726C2E40303430682E2E2E205C +:101DE000000D0A436865636B20494F2D436F6E7485 +:101DF000726F6C6C6572202E2E2E20000D0A4368C7 +:101E000065636B20414D44383931312041505520B4 +:101E100020202E2E2E20000D0A436865636B20447F +:101E2000533133303720525443202020202E2E2E81 +:101E300020006E6F742064657465637465642100AE +:101E40006E6F74207365742E20436865636B206227 +:101E500061747465727920616E642072756E2027DA +:101E6000736574646174652721006F6B2120005ACB +:101E70003843204D6F6E69746F722056322E3120B8 +:101E800062792044656E6E69732047756E696120C2 +:0C1E900028323032322D3230323429003A :00000001FF diff --git a/OperatingSystem/monitor_v2/zout/main.lst b/OperatingSystem/monitor_v2/zout/main.lst index 85af7cc..00bdea2 100644 --- a/OperatingSystem/monitor_v2/zout/main.lst +++ b/OperatingSystem/monitor_v2/zout/main.lst @@ -1,21 +1,33 @@ - 1: - 4000 SYS_RAM_START equ 0x4000 - 2: - 4010 SYS_BUF_START equ 0x4010 - 3: - 4110 PRG_RAM_START equ 0x4110 - 4: - FF00 PRG_RAM_TOP equ 0xFF00 - 5: - FFFF STACK_RAM_TOP equ 0xFFFF - 6: - 7: ;VAR_CONSOLE_CONF equ 0x07 ;CLK/TRG Clock @ 1843220.5/s - 8: - 000F VAR_CONSOLE_CONF equ 0x0F ;CPU/16 Clock @ 230402.5625/s - 9: - 10: - 0018 VAR_CONSOLE_BAUD equ 24 ;BAUD timer constant - 11: ;CLK/TRG Clock @ 1843220.5/s - 12: ; -> 0x16 : 14400 - 13: ;CPU/16 Clock @ 230402.5625/s - 14: ; -> 12 : 19200 - 15: ; -> 24 : 9600 - 16: - 17: ; include IO device addresses - 18: .include "addresses.s" + 1: ;---------------------------------------------------------------- + 2: ;Z8C Homebrew Computer Monitor + 3: ;by Dennis Gunia (01/2023) + 4: ;---------------------------------------------------------------- + 5: + 6: ;================================================================ + 7: ; Memory areas + 8: ;================================================================ + 9: - 4000 SYS_RAM_START equ 0x4000 + 10: - 4010 SYS_BUF_START equ 0x4010 + 11: - 4110 PRG_RAM_START equ 0x4110 + 12: - FF00 PRG_RAM_TOP equ 0xFF00 + 13: - FFFF STACK_RAM_TOP equ 0xFFFF + 14: + 15: ;================================================================ + 16: ; Terminal configuration + 17: ;================================================================ + 18: - 000F VAR_CONSOLE_CONF equ 0x0F ;CPU/16 Clock @ 230402.5625/s + 19: - 0018 VAR_CONSOLE_BAUD equ 24 ;BAUD timer constant + 20: ;CLK/TRG Clock @ 1843220.5/s + 21: ; -> 0x16 : 14400 + 22: ;CPU/16 Clock @ 230402.5625/s + 23: ; -> 12 : 19200 + 24: ; -> 24 : 9600 + 25: + 26: ;================================================================ + 27: ; Includes (1/2) + 28: ;================================================================ + 29: ; include IO device addresses + 30: .include "addresses.s" **** include/addresses.s **** 1: - 0000 CS_BANK equ 0000000b 2: - 0001 CS_DIP equ 0000001b @@ -64,478 +76,144 @@ 45: - 00F7 CS_PIO_BC .EQU 0xF7 46: - 00F4 CS_PIO_AD .EQU 0xF4 47: - 00F6 CS_PIO_AC .EQU 0xF6 + 48: + 49: - 00F8 CS_APU_DATA .EQU 0xF8 **** main.asm **** - 19: - 20: - 0000 org 0x0000 - 21: - 0000 RST_00: ;Hardware Restart - 22: 0+10 0000 31FFFF ld sp, STACK_RAM_TOP - 23: 10+4 0003 F3 di - 24: 14+10 0004 C35000 jp mon_start_init_sound - 25: - 26: - 0008 org 0x0008 - 27: - 0008 RST_08 ;Print Char - 28: 24+10 0008 C3C40E jp EXEC_RST_08 - 29: - 30: - 0010 org 0x0010 - 31: - 0010 RST_10 ;receive char - 32: 34+10 0010 C3C80E jp EXEC_RST_10 - 33: - 34: - 0018 org 0x0018 - 35: - 0018 RST_18 ;Buffer length - 36: 44+10 0018 C3D40E jp EXEC_RST_18 - 37: - 38: - 39: - 001B INT_VEC: - 40: - 0044 org 0x0044 - 41: ;DEFW EXEC_INT_VDP - 42: - 43: ;memory var template - 44: - 0044 mon_var_template: - 45: - 4000 phase SYS_RAM_START - 46: - 47: - 4000 var_buffer_len: - 48: - 4000 00 defb 0 - 49: - 4001 var_last_char: - 50: - 4001 00 defb 0 - 51: - 4002 var_curserx: - 52: - 4002 00 defb 0 - 53: - 4003 var_cursery: - 54: - 4003 00 defb 0 - 55: - 4004 var_curserstate: - 56: - 4004 00 defb 0 - 57: - 4005 var_curseron: - 58: - 4005 00 defb 0 - 59: - 4006 var_curserchar: - 60: - 4006 00 defb 0 - 61: - 4007 var_curserlastaddr: - 62: - 4007 0000 defw 0 - 63: - 4009 var_scratch: - 64: - 4009 ..4018 00 defs 16 ;16 bytes space for scratch vars - 65: - 4019 var_ps2mem: - 66: - 4019 ..4028 00 defs 16 ;16 bytes space for scratch vars - 67: - 4029 var_buffer: - 68: - 4029 00 defb 0 ;var lentgh - 69: - 70: - 006E dephase - 71: - 006E mon_var_template_end: - 72: 54+4 006E 00 nop - 73: ;end memory var template - 74: - 0050 org 0x0050 - 75: - 0050 mon_start_init_sound: - 76: ;CALL BTLDR_ENTRY ;call bootloader first - 77: ;ld D,0x08 ; Select register #8 - 78: ;ld A,0x00 ; Volume channel A 0 - 79: ;call AY0_WRITE_REG - 80: ;ld D,0x09 ; Select register #9 - 81: ;ld A,0x00 ; Volume channel B 0 - 82: ;call AY0_WRITE_REG - 83: ;ld D,0x0A ; Select register #10 - 84: ;ld A,0x00 ; Volume channel C 0 - 85: ;call AY0_WRITE_REG - 86: - 87: - 0050 mon_start_init_ctc: - 88: - 89: ; Set CTC Ch2 Interrupt Vector - 90: ;LD A,40h ; it vector defined in bit 7­3,bit 2­1 don't care, bit 0 = 0 - 91: ;OUT (IO_CTC0_C0),A - 92: ; Init CTC Channel 2 - 93: ;LD A,10100111b - 94: ;OUT (IO_CTC0_C2),A - 95: ;LD A,0x34 ; 55Hz ISR - 96: ;LD A,0xFF ; 55Hz ISR - 97: ;OUT (IO_CTC0_C2),A - 98: - 99: ;INIT PIO - 100: 58+7 0050 3ECF LD A,0xCF - 101: 65+11 0052 D3F6 OUT (CS_PIO_AC), A - 102: 76+7 0054 3EF5 LD A,11110101b - 103: 83+11 0056 D3F6 OUT (CS_PIO_AC), A - 104: - 105: - 106: 94+4 0058 AF xor a - 107: ;ld i, a - 108: ;im 2 ;set int mode 2 - 109: - 110: 98+13 0059 320440 ld (var_curserstate),a - 111: 111+13 005C 320540 ld (var_curseron),a - 112: 124+7 005F 3E20 ld a, " " - 113: 131+13 0061 320640 ld (var_curserchar),a + 31: - 00F9 CS_APU_CTRL .EQU 0xF9 + 32: + 33: ;================================================================ + 34: ; RST Vectors for BASIC + 35: ;================================================================ + 36: - 0000 org 0x0000 + 37: - 0000 RST_00: ;Hardware Restart + 38: 0+10 0000 C35000 jp BOOT_PHASE0 + 39: + 40: - 0008 org 0x0008 + 41: - 0008 RST_08 ;Print Char + 42: 10+10 0008 C3040D jp EXEC_RST_08 + 43: + 44: - 0010 org 0x0010 + 45: - 0010 RST_10 ;receive char + 46: 20+10 0010 C3080D jp EXEC_RST_10 + 47: + 48: - 0018 org 0x0018 + 49: - 0018 RST_18 ;Buffer length + 50: 30+10 0018 C3140D jp EXEC_RST_18 + 51: + 52: ;================================================================ + 53: ; Default interrupt vectors + 54: ;================================================================ + 55: - 001B INT_VEC: + 56: - 0044 org 0x0044 + 57: ;DEFW EXEC_INT_VDP + 58: + 59: ;================================================================ + 60: ; Memory layout + 61: ;================================================================ + 62: - 0044 mon_var_template: + 63: - 4000 phase SYS_RAM_START + 64: + 65: - 4000 var_buffer_len: + 66: - 4000 00 defb 0 + 67: - 4001 var_last_char: + 68: - 4001 00 defb 0 + 69: - 4002 var_curserx: + 70: - 4002 00 defb 0 + 71: - 4003 var_cursery: + 72: - 4003 00 defb 0 + 73: - 4004 var_curserstate: + 74: - 4004 00 defb 0 + 75: - 4005 var_curseron: + 76: - 4005 00 defb 0 + 77: - 4006 var_curserchar: + 78: - 4006 00 defb 0 + 79: - 4007 var_curserlastaddr: + 80: - 4007 0000 defw 0 + 81: - 4009 var_pio_present: + 82: - 4009 00 defb 0 + 83: - 400A var_apu_present: + 84: - 400A 00 defb 0 + 85: - 400B var_scratch: + 86: - 400B ..401A 00 defs 16 ;16 bytes space for scratch vars + 87: - 401B var_ps2mem: + 88: - 401B ..402A 00 defs 16 ;16 bytes space for scratch vars + 89: - 402B var_buffer: + 90: - 402B 00 defb 0 ;var lentgh + 91: - 402C var_idebuffer: + 92: - 402C ..432B 00 defs 768 + 93: + 94: - 0370 dephase + 95: - 0370 mon_var_template_end: + 96: 40+4 0370 00 nop + 97: + 98: ;================================================================ + 99: ; Start of monitor + 100: ;================================================================ + 101: - 0050 org 0x0050 + 102: - 0050 BOOT_PHASE0: ;Setup Hardware + 103: ;Setup Stack-Pointer + 104: 44+10 0050 31FFFF ld sp, STACK_RAM_TOP + 105: ;Disable Interrupts + 106: 54+4 0053 F3 di + 107: ;Setup PIO on MIO Board + 108: 58+7 0054 3ECF LD A,0xCF + 109: 65+11 0056 D3F6 OUT (CS_PIO_AC), A + 110: 76+7 0058 3EF7 LD A,11110111b ;All pins inputs except speaker + 111: 83+11 005A D3F6 OUT (CS_PIO_AC), A + 112: 94+7 005C 3E03 LD A,00000011B ;Preset I2C pins to high + 113: 101+11 005E D3F6 OUT (CS_PIO_AC), A 114: - 115: - 116: - 117: - 118: ;ei ; Enable Interrupts - 119: - 120: ;jr mon_start_ram ;skip serial, cause not used atm - 121: - 0064 mon_start_init_serial: - 122: 144+17 0064 CD7E02 call CONSOLE_INIT - 123: ;jp mon_start_complete - 124: - 125: - 0067 mon_start_ram: - 126: 161+10 0067 214400 ld hl,mon_var_template - 127: 171+10 006A 116E00 ld de,mon_var_template_end - 128: 181+10 006D 010040 ld bc,SYS_RAM_START - 129: - 0070 mon_start_ram_loop: - 130: 191+7 0070 7E ld a,(hl) ;copy values - 131: 198+7 0071 02 ld (bc),a - 132: 205+6 0072 23 inc hl - 133: 211+6 0073 03 inc bc - 134: 217+11 0074 E5 push hl ;check if end is reached - 135: 228+15 0075 ED52 sbc hl,de - 136: 243+10 0077 E1 pop hl - 137: 253+10 0078 C27000 jp nz, mon_start_ram_loop - 138: ;template copy done - 139: - 140: - 007B mon_start_complete: - 141: - 142: ;call keyboard_init_io - 143: ;call vdpconsole_init + 115: ;Set variables + 116: 112+13 0060 320440 ld (var_curserstate),a + 117: 125+13 0063 320540 ld (var_curseron),a + 118: 138+7 0066 3E20 ld a, " " + 119: 145+13 0068 320640 ld (var_curserchar),a + 120: + 121: ;Initialize Console (Serial-Port) + 122: 158+17 006B CD9E00 call CONSOLE_INIT + 123: + 124: - 006E BOOT_PHASE1: ;Copy default values to RAM + 125: 175+10 006E 214400 ld hl,mon_var_template + 126: 185+10 0071 117003 ld de,mon_var_template_end + 127: 195+10 0074 010040 ld bc,SYS_RAM_START + 128: - 0077 BOOT_PHASE1_LOOP: + 129: 205+7 0077 7E ld a,(hl) ;copy values + 130: 212+7 0078 02 ld (bc),a + 131: 219+6 0079 23 inc hl + 132: 225+6 007A 03 inc bc + 133: 231+11 007B E5 push hl ;check if end is reached + 134: 242+15 007C ED52 sbc hl,de + 135: 257+10 007E E1 pop hl + 136: 267+10 007F C27700 jp nz, BOOT_PHASE1_LOOP + 137: ;template copy done + 138: + 139: - 0082 BOOT_PHASE2: ;Hardware initialized. + 140: ; Print banner + 141: 277+17 0082 CDEA00 call print_clear + 142: 294+10 0085 216F1E ld hl, [STR_Banner_Start] + 143: 304+17 0088 CDDF00 call print_str 144: - 145: ;call print_str - 146: + 145: ; Power-On Self Tests + 146: 321+17 008B CDDD1C call POST_START 147: - 148: ;jp splash_run - 149: - 150: ;jp ps2demo_run - 151: ;call debug_init - 152: ;call vdp_cursor_on - 153: ;jp COLD - 154: - 155: 263+17 007B CDCA02 call print_clear - 156: 280+10 007E 216013 ld hl, [STR_Banner_Start] - 157: 290+17 0081 CDBF02 call print_str - 158: - 159: 307+17 0084 CDF411 call ideif_init_drive - 160: - 161: 324+10 0087 114000 LD DE,0x40 - 162: 334+17 008A CDD70E CALL beep - 163: - 164: ;call vdp_cursor_on - 165: 351+17 008D CD9900 call PROMPT_BEGIN - 166: - 167: ;halt CPU if prompt exits - 168: 368+4 0090 76 halt - 169: - 170: ; Misc Functions - 171: - 0091 AY0_WRITE_REG: - 172: 372+4 0091 47 LD B,A - 173: 376+4 0092 7A LD A,D - 174: 380+11 0093 D340 OUT (IO_AY0_ADDR),A - 175: 391+4 0095 78 LD A,B - 176: 395+11 0096 D341 OUT (IO_AY0_DATA),A - 177: 406+10 0098 C9 RET - 178: - 179: - 0099 PROMPT_BEGIN: - 180: 416+17 0099 CDD102 call print_newLine - 181: ;call A_RTS_ON - 182: 433+7 009C 3E3E ld a,'>' - 183: 440+17 009E CDB702 call print_char - 184: 457+4 00A1 AF xor a ;reset buffer len - 185: 461+13 00A2 320040 ld (var_buffer_len),a - 186: - 187: - 00A5 PROMPT_BEGIN_READ_LOOP: - 188: 474+17 00A5 CDF802 call read_char - 189: ;call keybd_read_ascii - 190: 491+10 00A8 CAA500 jp z, PROMPT_BEGIN_READ_LOOP ; wait until char avail - 191: 501+11 00AB F5 push af - 192: 512+10 00AC F1 pop af - 193: ; process special ops - 194: 522+7 00AD FE0D cp 13 ; enter - 195: 529+10 00AF CAFC00 jp z,PROMPT_BEGIN_READ_PROCESS - 196: 539+7 00B2 FE0A cp 10 - 197: 546+10 00B4 CAA500 jp z, PROMPT_BEGIN_READ_LOOP; skip LF for file load - 198: 556+7 00B7 FE08 cp 0x08 ; backspace 0x08 VT102 0x7f Putty - 199: 563+10 00B9 CAD600 jp z,PROMPT_BEGIN_READ_BACKSPACE - 200: - 201: 573+11 00BC F5 push af - 202: ; a contains latest char - 203: 584+10 00BD 212940 ld hl,[var_buffer] - 204: 594+7 00C0 1600 ld d,0 - 205: 601+13 00C2 3A0040 ld a,(var_buffer_len) - 206: 614+4 00C5 5F ld e,a - 207: 618+11 00C6 19 add hl,de ;hl now contains pointer to last position in buffer - 208: 629+4 00C7 3C inc a - 209: 633+13 00C8 320040 ld (var_buffer_len),a ;store incremented buffer length - 210: - 211: 646+10 00CB F1 pop af - 212: 656+7 00CC 77 ld (hl),a - 213: 663+17 00CD CDB702 call print_char - 214: 680+6 00D0 23 inc hl - 215: 686+4 00D1 AF xor a ;a = 0 - 216: 690+7 00D2 77 ld (hl),a ;always add null termination after last char - 217: 697+10 00D3 C3A500 jp PROMPT_BEGIN_READ_LOOP - 218: - 219: - 00D6 PROMPT_BEGIN_READ_BACKSPACE: - 220: 707+13 00D6 3A0040 ld a,(var_buffer_len) - 221: 720+4 00D9 A7 and a - 222: 724+10 00DA CAA500 jp z, PROMPT_BEGIN_READ_LOOP ; do not continue if already at char 0 - 223: 734+4 00DD 3D dec a ;decrement length - 224: 738+13 00DE 320040 ld (var_buffer_len),a ;and store it - 225: 751+4 00E1 5F ld e,a ;load de with decremented value - 226: 755+7 00E2 1600 ld d,0 - 227: 762+10 00E4 212940 ld hl,[var_buffer] - 228: 772+11 00E7 19 add hl,de ;hl now contains pointer to last position in buffer - 229: 783+4 00E8 AF xor a ; store null byte to current location - 230: 787+7 00E9 77 ld (hl),a - 231: ;call print_delete - 232: 794+7 00EA 3E08 ld a, 0x08 - 233: 801+17 00EC CDB702 call print_char - 234: 818+7 00EF 3E20 ld a, 0x20 - 235: 825+17 00F1 CDB702 call print_char - 236: 842+7 00F4 3E08 ld a, 0x08 - 237: 849+17 00F6 CDB702 call print_char - 238: 866+10 00F9 C3A500 jp PROMPT_BEGIN_READ_LOOP - 239: - 240: - 00FC PROMPT_BEGIN_READ_PROCESS: - 241: ;call print_newLine - 242: ;ld hl,var_buffer - 243: ;call print_str - 244: - 245: 876+13 00FC 3A2940 ld a,([var_buffer]) - 246: 889+7 00FF FE24 cp '$' ;jump to addr - 247: 896+10 0101 CA2F01 jp z, CMD_EXEC - 248: 906+7 0104 FE3F cp '?' ;print hexdump - 249: 913+10 0106 CA4E01 jp z, CMD_VIEW - 250: 923+7 0109 FE21 cp '!' ;set memory - 251: 930+10 010B CAB801 jp z, CMD_SET - 252: 940+7 010E FE69 cp 'i' ;in IO - 253: 947+10 0110 CA1D02 jp z, CMD_IO_READ - 254: 957+7 0113 FE6F cp 'o' ;out IO - 255: 964+10 0115 CAF401 jp z, CMD_IO_WRITE - 256: 974+7 0118 FE64 cp 'd' ;disassemble - 257: 981+10 011A CA3902 jp z, CMD_DASM - 258: 991+7 011D FE78 cp 'x' ;start xmodem - 259: 998+10 011F CA060F jp z, xmodem_init - 260: - 261: - 262: 1008+17 0122 CDD102 call print_newLine - 263: 1025+10 0125 218B13 ld hl, [STR_Unknown] - 264: 1035+17 0128 CDBF02 call print_str - 265: 1052+10 012B C39900 jp PROMPT_BEGIN - 266: - 267: 1062+10 012E C9 ret - 268: - 269: - 012F CMD_EXEC: - 270: 1072+4 012F AF xor a ;write null byte to buffer pos 0 to prevent reexecute the last command - 271: 1076+13 0130 322940 ld (var_buffer),a - 272: - 273: 1089+10 0133 212A40 ld hl,var_buffer+1 ;load 1st byte - 274: 1099+17 0136 CD2403 call DHEX_TO_BYTE - 275: 1116+4 0139 47 ld b,a ;store result in b - 276: 1120+4 013A 7B ld a,e ;check for error - 277: 1124+4 013B A7 and a - 278: 1128+10 013C C27202 jp nz, CMD_SYNTAX_ERROR - 279: - 280: 1138+10 013F 212C40 ld hl,var_buffer+3 ;load 2nd byte - 281: 1148+17 0142 CD2403 call DHEX_TO_BYTE - 282: 1165+4 0145 4F ld c,a - 283: 1169+4 0146 7B ld a,e ;check for error - 284: 1173+4 0147 A7 and a - 285: 1177+10 0148 C27202 jp nz, CMD_SYNTAX_ERROR - 286: - 287: 1187+4 014B 60 ld h,b - 288: 1191+4 014C 69 ld l,c - 289: 1195+4 014D E9 jp (hl) - 290: - 291: - 014E CMD_VIEW: - 292: 1199+17 014E CDD102 call print_newLine - 293: 1216+10 0151 212A40 ld hl,var_buffer+1 ;load 1st byte - 294: 1226+17 0154 CD2403 call DHEX_TO_BYTE - 295: 1243+4 0157 47 ld b,a ;store result in b - 296: 1247+4 0158 7B ld a,e ;check for error - 297: 1251+4 0159 A7 and a - 298: 1255+10 015A C27202 jp nz, CMD_SYNTAX_ERROR - 299: - 300: 1265+10 015D 212C40 ld hl,var_buffer+3 ;load 2nd byte - 301: 1275+17 0160 CD2403 call DHEX_TO_BYTE - 302: 1292+4 0163 4F ld c,a - 303: 1296+4 0164 7B ld a,e ;check for error - 304: 1300+4 0165 A7 and a - 305: 1304+10 0166 C27202 jp nz, CMD_SYNTAX_ERROR - 306: - 307: - 308: 1314+13 0169 3A2E40 ld a,(var_buffer+5) - 309: 1327+7 016C FE20 cp ' ' - 310: 1334+10 016E C27202 jp nz, CMD_SYNTAX_ERROR - 311: - 312: 1344+10 0171 212F40 ld hl,var_buffer+6 ;load length - 313: 1354+17 0174 CD2403 call DHEX_TO_BYTE - 314: 1371+11 0177 F5 push af - 315: 1382+4 0178 7B ld a,e ;check for error - 316: 1386+4 0179 A7 and a - 317: 1390+10 017A C27202 jp nz, CMD_SYNTAX_ERROR - 318: - 319: ;draw header - 320: 1400+10 017D 219013 ld hl,[STR_HEXDUMP_HEADER] - 321: 1410+17 0180 CDBF02 call print_str - 322: - 323: 1427+10 0183 F1 pop af - 324: ;loading vars done. display results - 325: 1437+4 0184 60 ld h, b ;pointer to current byte - 326: 1441+4 0185 69 ld l, c ;pointer to current byte - 327: 1445+4 0186 47 ld b, a ;bytes counter - 328: - 329: ;draw row - 330: - 0187 CMD_VIEW_ROW: - 331: 1449+17 0187 CDD102 call print_newLine - 332: 1466+4 018A 7C ld a,h ;print start - 333: 1470+17 018B CDE702 call print_a_hex - 334: 1487+4 018E 7D ld a,l - 335: 1491+17 018F CDE702 call print_a_hex - 336: 1508+7 0192 3E20 ld a, ' ' - 337: 1515+17 0194 CDB702 call print_char - 338: 1532+7 0197 0E10 ld c, 16 ;column counter - 339: - 0199 CMD_VIEW_ROW_LOOP: - 340: 1539+7 0199 7E ld a,(hl) - 341: 1546+17 019A CDE702 call print_a_hex - 342: - 343: 1563+6 019D 23 inc hl ;increment pointer - 344: 1569+4 019E 05 dec b ;decrement byte counter - 345: 1573+4 019F 0D dec c ;decrement column counter - 346: - 347: 1577+4 01A0 78 ld a,b - 348: 1581+4 01A1 A7 and a - 349: 1585+10 01A2 CAB201 jp z,CMD_VIEW_END ;if byte counter = 0 -> end reached - 350: - 351: 1595+4 01A5 79 ld a,c - 352: 1599+4 01A6 A7 and a - 353: 1603+10 01A7 CA8701 jp z,CMD_VIEW_ROW ;else if column counter = 0 -> 16 chars printed. next row - 354: - 355: 1613+7 01AA 3E20 ld a, ' ' - 356: 1620+17 01AC CDB702 call print_char - 357: 1637+10 01AF C39901 jp CMD_VIEW_ROW_LOOP ;else - 358: - 01B2 CMD_VIEW_END: - 359: 1647+17 01B2 CDD102 call print_newLine - 360: 1664+10 01B5 C39900 jp PROMPT_BEGIN - 361: - 362: - 01B8 CMD_SET: - 363: 1674+10 01B8 212A40 ld hl,var_buffer+1 ;load 1st byte - 364: 1684+17 01BB CD2403 call DHEX_TO_BYTE - 365: 1701+4 01BE 47 ld b,a ;store result in b - 366: 1705+4 01BF 7B ld a,e ;check for error - 367: 1709+4 01C0 A7 and a - 368: 1713+10 01C1 C27202 jp nz, CMD_SYNTAX_ERROR - 369: - 370: 1723+10 01C4 212C40 ld hl,var_buffer+3 ;load 2nd byte - 371: 1733+17 01C7 CD2403 call DHEX_TO_BYTE - 372: 1750+4 01CA 4F ld c,a - 373: 1754+4 01CB 7B ld a,e ;check for error - 374: 1758+4 01CC A7 and a - 375: 1762+10 01CD C27202 jp nz, CMD_SYNTAX_ERROR - 376: ;bc now contains the start address - 377: - 378: 1772+10 01D0 212E40 ld hl,var_buffer+5 - 379: - 01D3 CMD_SET_LOOP: - 380: 1782+7 01D3 7E ld a,(hl) - 381: 1789+7 01D4 FE00 cp 0 ;if 0 then end - 382: 1796+10 01D6 CAEE01 jp z, CMD_SET_END - 383: 1806+7 01D9 FE20 cp ' ' - 384: 1813+10 01DB C27202 jp nz, CMD_SYNTAX_ERROR - 385: 1823+6 01DE 23 inc hl ;next byte - 386: 1829+17 01DF CD2403 call DHEX_TO_BYTE - 387: 1846+7 01E2 02 ld (bc),a ;load byte to - 388: 1853+4 01E3 7B ld a,e - 389: 1857+4 01E4 A7 and a - 390: 1861+10 01E5 C27202 jp nz, CMD_SYNTAX_ERROR - 391: 1871+6 01E8 03 inc bc - 392: 1877+6 01E9 23 inc hl - 393: 1883+6 01EA 23 inc hl - 394: 1889+10 01EB C3D301 jp CMD_SET_LOOP - 395: - 01EE CMD_SET_END: - 396: 1899+17 01EE CDD102 call print_newLine - 397: 1916+10 01F1 C39900 jp PROMPT_BEGIN - 398: - 399: - 400: - 01F4 CMD_IO_WRITE: - 401: 1926+10 01F4 212A40 ld hl,var_buffer+1 ;load 1st byte - 402: 1936+17 01F7 CD2403 call DHEX_TO_BYTE - 403: 1953+4 01FA 4F ld c,a ;store result in b - 404: 1957+4 01FB 7B ld a,e ;check for error - 405: 1961+4 01FC A7 and a - 406: 1965+10 01FD C27202 jp nz, CMD_SYNTAX_ERROR - 407: - 408: 1975+13 0200 3A2C40 ld a,(var_buffer+3) - 409: 1988+7 0203 FE20 cp ' ' - 410: 1995+10 0205 C27202 jp nz, CMD_SYNTAX_ERROR - 411: - 412: 2005+10 0208 212D40 ld hl,var_buffer+4 ;load 1st byte - 413: 2015+17 020B CD2403 call DHEX_TO_BYTE - 414: 2032+11 020E F5 push af - 415: 2043+4 020F 7B ld a,e ;check for error - 416: 2047+4 0210 A7 and a - 417: 2051+10 0211 C27202 jp nz, CMD_SYNTAX_ERROR - 418: - 419: 2061+10 0214 F1 pop af - 420: 2071+12 0215 ED79 out (c),a - 421: 2083+17 0217 CDD102 call print_newLine - 422: 2100+10 021A C39900 jp PROMPT_BEGIN - 423: - 424: - 021D CMD_IO_READ: - 425: 2110+10 021D 212A40 ld hl,var_buffer+1 ;load 1st byte - 426: 2120+17 0220 CD2403 call DHEX_TO_BYTE - 427: 2137+4 0223 4F ld c,a ;store result in b - 428: 2141+4 0224 7B ld a,e ;check for error - 429: 2145+4 0225 A7 and a - 430: 2149+10 0226 C27202 jp nz, CMD_SYNTAX_ERROR - 431: - 432: 2159+12 0229 ED78 in a,(c) - 433: 2171+11 022B F5 push af - 434: 2182+17 022C CDD102 call print_newLine - 435: 2199+10 022F F1 pop af - 436: 2209+17 0230 CDE702 call print_a_hex - 437: 2226+17 0233 CDD102 call print_newLine - 438: 2243+10 0236 C39900 jp PROMPT_BEGIN - 439: - 440: - 0239 CMD_DASM: - 441: 2253+17 0239 CDD102 call print_newLine - 442: 2270+10 023C 212A40 ld hl,var_buffer+1 ;load 1st byte - 443: 2280+17 023F CD2403 call DHEX_TO_BYTE - 444: 2297+4 0242 47 ld b,a ;store result in b - 445: 2301+4 0243 7B ld a,e ;check for error - 446: 2305+4 0244 A7 and a - 447: 2309+10 0245 C27202 jp nz, CMD_SYNTAX_ERROR - 448: - 449: 2319+10 0248 212C40 ld hl,var_buffer+3 ;load 2nd byte - 450: 2329+17 024B CD2403 call DHEX_TO_BYTE - 451: 2346+4 024E 4F ld c,a - 452: 2350+4 024F 7B ld a,e ;check for error - 453: 2354+4 0250 A7 and a - 454: 2358+10 0251 C27202 jp nz, CMD_SYNTAX_ERROR - 455: - 456: - 457: 2368+13 0254 3A2E40 ld a,(var_buffer+5) - 458: 2381+7 0257 FE20 cp ' ' - 459: 2388+10 0259 C27202 jp nz, CMD_SYNTAX_ERROR - 460: - 461: 2398+10 025C 212F40 ld hl,var_buffer+6 ;load length - 462: 2408+17 025F CD2403 call DHEX_TO_BYTE - 463: 2425+11 0262 F5 push af - 464: 2436+4 0263 7B ld a,e ;check for error - 465: 2440+4 0264 A7 and a - 466: 2444+10 0265 C27202 jp nz, CMD_SYNTAX_ERROR - 467: - 468: 2454+4 0268 60 ld h,b - 469: 2458+4 0269 69 ld l,c - 470: - 471: 2462+10 026A F1 pop af ;restore af - 472: 2472+4 026B 47 ld b,a - 473: - 474: 2476+17 026C CD7503 call disassemble - 475: - 476: - 477: 2493+10 026F C39900 jp PROMPT_BEGIN - 478: - 479: - 0272 CMD_SYNTAX_ERROR: - 480: 2503+17 0272 CDD102 call print_newLine - 481: 2520+10 0275 218613 ld hl, [STR_SyntaxError] - 482: 2530+17 0278 CDBF02 call print_str - 483: 2547+10 027B C39900 jp PROMPT_BEGIN - 484: - 485: - 486: - 487: - 027E Includes: - 488: ;.include "bootldr.s" - 489: .include "console.s" + 148: ; Detect IDE drives + 149: 338+17 008E CDAB14 call ideif_init_all + 150: + 151: ; Beep after start + 152: 355+10 0091 114000 LD DE,0x40 + 153: 365+10 0094 014800 LD BC,0x48 + 154: 375+17 0097 CD170D CALL beep + 155: + 156: ; Start commandline + 157: 392+10 009A C3EB17 jp COMMAND + 158: + 159: ; This instruction should never be reached + 160: 402+4 009D 76 halt + 161: + 162: ;================================================================ + 163: ; Includes (2/2) + 164: ;================================================================ + 165: .include "console.s" **** include/console.s **** 1: ;DIP SWICTHES 2: ;1843200 CLK / x16 SIO CLOCK MODE = 115200 @@ -545,187 +223,208 @@ 6: ;9600 -> 12 / 00110000 7: ; 8: - 9: - 027E CONSOLE_INIT: - 10: - 027E CONSOLE_INIT_CTC: + 9: - 009E CONSOLE_INIT: + 10: - 009E CONSOLE_INIT_CTC: 11: ;LD A,00001111b ; Set /16 Divider, CPU Trigger, Time COnstant Follows - 12: 2557+7 027E 3E4F LD A,01001111b ; External Trigger, Time COnstant Follows - 13: 2564+11 0280 D304 OUT (CS_CTC_0),A - 14: 2575+11 0282 DB01 IN A,(CS_DIP) ; Read BAUD from DIP-Switches + 12: 406+7 009E 3E4F LD A,01001111b ; External Trigger, Time COnstant Follows + 13: 413+11 00A0 D304 OUT (CS_CTC_0),A + 14: 424+11 00A2 DB01 IN A,(CS_DIP) ; Read BAUD from DIP-Switches 15: ;LD A,39 - 16: 2586+11 0284 D304 OUT (CS_CTC_0),A - 17: - 0286 CONSOLE_INIT_SIO: - 18: 2597+7 0286 3E30 LD A,00110000b ;write into WR0: error reset, select WR0 - 19: 2604+11 0288 D309 OUT (CS_SIO_A_C),A - 20: 2615+7 028A 3E18 LD a,018h ;write into WR0: channel reset - 21: 2622+11 028C D309 OUT (CS_SIO_A_C),A - 22: 2633+7 028E 3E04 LD a,004h ;write into WR0: select WR4 - 23: 2640+11 0290 D309 OUT (CS_SIO_A_C),A - 24: 2651+7 0292 3E44 LD a,01000100b ;write into WR4: clkx16,1 stop bit, no parity - 25: 2658+11 0294 D309 OUT (CS_SIO_A_C),A - 26: 2669+7 0296 3E05 LD a,005h ;write into WR0: select WR5 - 27: 2676+11 0298 D309 OUT (CS_SIO_A_C),A - 28: 2687+7 029A 3EE8 LD a,11101000b ;DTR inactive, TX 8bit, BREAK off, TX on, RTS inactive - 29: 2694+11 029C D309 OUT (CS_SIO_A_C),A - 30: 2705+7 029E 3E01 LD a,01h ;write into WR0: select WR1 - 31: 2712+11 02A0 D309 OUT (CS_SIO_A_C),A - 32: 2723+7 02A2 3E04 LD a,00000100b ;no interrupt in CH B, special RX condition affects vect - 33: 2730+11 02A4 D309 OUT (CS_SIO_A_C),A - 34: 2741+7 02A6 3E02 LD a,02h ;write into WR0: select WR2 - 35: 2748+11 02A8 D309 OUT (CS_SIO_A_C),A - 36: 2759+7 02AA 3E00 LD a,0h ;write into WR2: cmd line int vect (see int vec table) + 16: 435+11 00A4 D304 OUT (CS_CTC_0),A + 17: - 00A6 CONSOLE_INIT_SIO: + 18: 446+7 00A6 3E30 LD A,00110000b ;write into WR0: error reset, select WR0 + 19: 453+11 00A8 D309 OUT (CS_SIO_A_C),A + 20: 464+7 00AA 3E18 LD a,018h ;write into WR0: channel reset + 21: 471+11 00AC D309 OUT (CS_SIO_A_C),A + 22: 482+7 00AE 3E04 LD a,004h ;write into WR0: select WR4 + 23: 489+11 00B0 D309 OUT (CS_SIO_A_C),A + 24: 500+7 00B2 3E44 LD a,01000100b ;write into WR4: clkx16,1 stop bit, no parity + 25: 507+11 00B4 D309 OUT (CS_SIO_A_C),A + 26: 518+7 00B6 3E05 LD a,005h ;write into WR0: select WR5 + 27: 525+11 00B8 D309 OUT (CS_SIO_A_C),A + 28: 536+7 00BA 3EE8 LD a,11101000b ;DTR inactive, TX 8bit, BREAK off, TX on, RTS inactive + 29: 543+11 00BC D309 OUT (CS_SIO_A_C),A + 30: 554+7 00BE 3E01 LD a,01h ;write into WR0: select WR1 + 31: 561+11 00C0 D309 OUT (CS_SIO_A_C),A + 32: 572+7 00C2 3E04 LD a,00000100b ;no interrupt in CH B, special RX condition affects vect + 33: 579+11 00C4 D309 OUT (CS_SIO_A_C),A + 34: 590+7 00C6 3E02 LD a,02h ;write into WR0: select WR2 + 35: 597+11 00C8 D309 OUT (CS_SIO_A_C),A + 36: 608+7 00CA 3E00 LD a,0h ;write into WR2: cmd line int vect (see int vec table) 37: ;bits D3,D2,D1 are changed according to RX condition - 38: 2766+11 02AC D309 OUT (CS_SIO_A_C),A - 39: 2777+7 02AE 3E03 LD a,003h ;write into WR0: select WR3 - 40: 2784+11 02B0 D309 OUT (CS_SIO_A_C),A - 41: 2795+7 02B2 3EC1 LD a,0C1h ;RX 8bit, auto enable off, RX on - 42: 2802+11 02B4 D309 OUT (CS_SIO_A_C),A + 38: 615+11 00CC D309 OUT (CS_SIO_A_C),A + 39: 626+7 00CE 3E03 LD a,003h ;write into WR0: select WR3 + 40: 633+11 00D0 D309 OUT (CS_SIO_A_C),A + 41: 644+7 00D2 3EC1 LD a,0C1h ;RX 8bit, auto enable off, RX on + 42: 651+11 00D4 D309 OUT (CS_SIO_A_C),A 43: ;Channel A RX active - 44: 2813+10 02B6 C9 RET + 44: 662+10 00D6 C9 RET 45: 46: ; A contains char 47: ; Destroys A - 48: - 02B7 print_char: - 49: 2823+11 02B7 F5 push af - 50: 2834+11 02B8 D308 out (CS_SIO_A_D),a - 51: 2845+17 02BA CDDC02 call print_wait_out - 52: 2862+10 02BD F1 pop af + 48: - 00D7 print_char: + 49: 672+11 00D7 F5 push af + 50: 683+11 00D8 D308 out (CS_SIO_A_D),a + 51: 694+17 00DA CDFC00 call print_wait_out + 52: 711+10 00DD F1 pop af 53: ;call print_char - 54: 2872+10 02BE C9 ret + 54: 721+10 00DE C9 ret 55: ; HL contains pointer to string 56: ; Destroy A, HL 57: - 58: - 02BF print_str: - 59: 2882+7 02BF 7E ld a, (hl) - 60: 2889+4 02C0 B7 or a - 61: 2893+7+5 02C1 2806 jr z,print_str_end - 62: 2900+17 02C3 CDB702 call print_char - 63: 2917+6 02C6 23 inc hl - 64: 2923+12 02C7 18F6 jr print_str - 65: - 02C9 print_str_end: - 66: 2935+10 02C9 C9 ret + 58: - 00DF print_str: + 59: 731+7 00DF 7E ld a, (hl) + 60: 738+4 00E0 B7 or a + 61: 742+7+5 00E1 2806 jr z,print_str_end + 62: 749+17 00E3 CDD700 call print_char + 63: 766+6 00E6 23 inc hl + 64: 772+12 00E7 18F6 jr print_str + 65: - 00E9 print_str_end: + 66: 784+10 00E9 C9 ret 67: - 68: - 02CA print_clear: - 69: 2945+10 02CA 210A03 ld hl, [MSG_CLEAR] - 70: 2955+17 02CD CDBF02 call print_str - 71: 2972+10 02D0 C9 ret + 68: - 00EA print_clear: + 69: 794+10 00EA 214A01 ld hl, [MSG_CLEAR] + 70: 804+17 00ED CDDF00 call print_str + 71: 821+10 00F0 C9 ret 72: - 73: - 02D1 print_newLine: - 74: 2982+7 02D1 3E0A ld a,10 - 75: 2989+17 02D3 CDB702 call print_char - 76: 3006+7 02D6 3E0D ld a,13 - 77: 3013+17 02D8 CDB702 call print_char - 78: 3030+10 02DB C9 ret + 73: - 00F1 print_newLine: + 74: 831+7 00F1 3E0A ld a,10 + 75: 838+17 00F3 CDD700 call print_char + 76: 855+7 00F6 3E0D ld a,13 + 77: 862+17 00F8 CDD700 call print_char + 78: 879+10 00FB C9 ret 79: ; destroys a - 80: - 02DC print_wait_out: + 80: - 00FC print_wait_out: 81: ; check for TX buffer empty - 82: 3040+4 02DC 97 sub a ;clear a, write into WR0: select RR0 - 83: 3044+4 02DD 3C inc a ;select RR1 - 84: 3048+11 02DE D309 out (CS_SIO_A_C),A - 85: 3059+11 02E0 DB09 in A,(CS_SIO_A_C) ;read RRx - 86: 3070+8 02E2 CB47 bit 0,A - 87: 3078+7+5 02E4 28F6 jr z,print_wait_out - 88: 3085+10 02E6 C9 ret + 82: 889+4 00FC 97 sub a ;clear a, write into WR0: select RR0 + 83: 893+4 00FD 3C inc a ;select RR1 + 84: 897+11 00FE D309 out (CS_SIO_A_C),A + 85: 908+11 0100 DB09 in A,(CS_SIO_A_C) ;read RRx + 86: 919+8 0102 CB47 bit 0,A + 87: 927+7+5 0104 28F6 jr z,print_wait_out + 88: 934+10 0106 C9 ret 89: - 90: - 02E7 print_a_hex: - 91: 3095+11 02E7 F5 push af - 92: 3106+11 02E8 C5 push bc - 93: 3117+11 02E9 D5 push de - 94: 3128+17 02EA CD5B03 call STRCONV_BYTES_TO_HEX - 95: 3145+4 02ED 78 ld a,b - 96: 3149+17 02EE CDB702 call print_char - 97: 3166+4 02F1 79 ld a,c - 98: 3170+17 02F2 CDB702 call print_char - 99: 3187+10 02F5 D1 pop de - 100: 3197+10 02F6 C1 pop bc - 101: 3207+10 02F7 F1 pop af - 102: - 103: - 02F8 read_char: - 104: 3217+17 02F8 CD1B03 call A_RTS_ON - 105: 3234+4 02FB 00 nop - 106: 3238+4 02FC AF xor a ; a = 0 - 107: 3242+11 02FD D309 out (CS_SIO_A_C), a ; select reg 0 - 108: 3253+11 02FF DB09 in a, (CS_SIO_A_C) ; read reg 0 - 109: 3264+7 0301 E601 and 1 ; mask D0 (recieve char available) - 110: 3271+17 0303 CD1203 call A_RTS_OFF - 111: 3288+5+6 0306 C8 ret Z ; return 0 if no char - 112: 3293+11 0307 DB08 in a, (CS_SIO_A_D) ; read char if avail - 113: 3304+10 0309 C9 ret ; return - 114: - 115: ;MSG_CRSR_0: - 116: ; db 0x1B, "[?25h",0 - 117: ;MSG_CRSR_1: - 118: ; db 0x1B, "[?25l",0 - 119: - 030A MSG_CLEAR: - 120: - 030A 1B5B324A db 27, '[2J', 27, '[H',0 + 90: - 0107 print_a_hex: + 91: 944+11 0107 F5 push af + 92: 955+11 0108 C5 push bc + 93: 966+11 0109 D5 push de + 94: 977+17 010A CD9B01 call STRCONV_BYTES_TO_HEX + 95: 994+4 010D 78 ld a,b + 96: 998+17 010E CDD700 call print_char + 97: 1015+4 0111 79 ld a,c + 98: 1019+17 0112 CDD700 call print_char + 99: 1036+10 0115 D1 pop de + 100: 1046+10 0116 C1 pop bc + 101: 1056+10 0117 F1 pop af + 102: 1066+10 0118 C9 ret + 103: + 104: - 0119 print_bcd: + 105: 1076+7 0119 C630 ADD 48 ;offset for ascii number + 106: 1083+17 011B CDD700 call print_char + 107: 1100+10 011E C9 ret + 108: + 109: - 011F read_char: + 110: 1110+17 011F CD5B01 call A_RTS_ON + 111: 1127+4 0122 00 nop + 112: 1131+4 0123 AF xor a ; a = 0 + 113: 1135+11 0124 D309 out (CS_SIO_A_C), a ; select reg 0 + 114: 1146+11 0126 DB09 in a, (CS_SIO_A_C) ; read reg 0 + 115: 1157+7 0128 E601 and 1 ; mask D0 (recieve char available) + 116: 1164+17 012A CD5201 call A_RTS_OFF + 117: 1181+5+6 012D C8 ret Z ; return 0 if no char + 118: 1186+11 012E DB08 in a, (CS_SIO_A_D) ; read char if avail + 119: 1197+10 0130 C9 ret ; return + 120: + 121: - 0131 read_bcd; + 122: 1207+17 0131 CD1F01 call read_char + 123: 1224+10 0134 CA3101 jp z, read_bcd + 124: 1234+17 0137 CDD700 call print_char + 125: 1251+7 013A DE30 sbc 48 ;remove ascii offset + 126: 1258+10 013C DA4701 jp c, _read_bcd_invalid ;if carry, wrong input + 127: 1268+7 013F FE0A cp 10 + 128: 1275+10 0141 CA4701 jp z, _read_bcd_invalid ;if equal or greater than 10, also error + 129: 1285+7 0144 E60F and 0x0F ;mask unused bits + 130: 1292+10 0146 C9 ret + 131: - 0147 _read_bcd_invalid + 132: 1302+7 0147 3EFF ld a, 0xFF + 133: 1309+10 0149 C9 ret + 134: + 135: + 136: ;MSG_CRSR_0: + 137: ; db 0x1B, "[?25h",0 + 138: ;MSG_CRSR_1: + 139: ; db 0x1B, "[?25l",0 + 140: - 014A MSG_CLEAR: + 141: - 014A 1B5B324A db 27, '[2J', 27, '[H',0 1B5B4800 - 121: - 122: - 123: - 124: ; Serial Util Functions - 125: - 0312 A_RTS_OFF: - 126: 3314+7 0312 3E05 ld a,005h ;write into WR0: select WR5 - 127: 3321+11 0314 D309 out (CS_SIO_A_C),A - 128: 3332+7 0316 3E68 ld a,068h ;DTR inactive, TX 8bit, BREAK off, TX on, RTS inactive - 129: 3339+11 0318 D309 out (CS_SIO_A_C),A - 130: 3350+10 031A C9 ret - 131: - 031B A_RTS_ON: - 132: 3360+7 031B 3E05 ld a,005h ;write into WR0: select WR5 - 133: 3367+11 031D D309 out (CS_SIO_A_C),A - 134: 3378+7 031F 3EEA ld a,0EAh ;DTR active, TX 8bit, BREAK off, TX on, RTS active - 135: 3385+11 0321 D309 out (CS_SIO_A_C),A + 142: + 143: + 144: + 145: ; Serial Util Functions + 146: - 0152 A_RTS_OFF: + 147: 1319+7 0152 3E05 ld a,005h ;write into WR0: select WR5 + 148: 1326+11 0154 D309 out (CS_SIO_A_C),A + 149: 1337+7 0156 3E68 ld a,068h ;DTR inactive, TX 8bit, BREAK off, TX on, RTS inactive + 150: 1344+11 0158 D309 out (CS_SIO_A_C),A + 151: 1355+10 015A C9 ret + 152: - 015B A_RTS_ON: + 153: 1365+7 015B 3E05 ld a,005h ;write into WR0: select WR5 + 154: 1372+11 015D D309 out (CS_SIO_A_C),A + 155: 1383+7 015F 3EEA ld a,0EAh ;DTR active, TX 8bit, BREAK off, TX on, RTS active + 156: 1390+11 0161 D309 out (CS_SIO_A_C),A **** main.asm **** - 490: 3396+10 0323 C9 ret - 491: .include "conversions.s" + 166: 1401+10 0163 C9 ret + 167: .include "conversions.s" **** include/conversions.s **** 1: ; HL Contains Address to string 2: ; E is 0xFF if error 3: ; E is 0x00 if okay 4: ; A returns byte 5: ; A,DE are destroyed - 6: - 0324 DHEX_TO_BYTE: - 7: 3406+11 0324 E5 PUSH HL ;Backup pointer + 6: - 0164 DHEX_TO_BYTE: + 7: 1411+11 0164 E5 PUSH HL ;Backup pointer 8: ; Load First Byte - 9: 3417+7 0325 7E LD A,(HL) ;Load first char (high) - 10: 3424+17 0326 CD4403 CALL HEX_TO_BIN ;Conv chart to 4bit - 11: 3441+7+5 0329 3815 jr C, DHEX_TO_BYTE_FAILED ;If error jmp to DHEX_TO_BYTE_FAILED - 12: 3448+8 032B CB27 SLA A ;shift result to upper 4 bits - 13: 3456+8 032D CB27 SLA A - 14: 3464+8 032F CB27 SLA A - 15: 3472+8 0331 CB27 SLA A - 16: 3480+4 0333 57 LD D,A ;store result in D + 9: 1422+7 0165 7E LD A,(HL) ;Load first char (high) + 10: 1429+17 0166 CD8401 CALL HEX_TO_BIN ;Conv chart to 4bit + 11: 1446+7+5 0169 3815 jr C, DHEX_TO_BYTE_FAILED ;If error jmp to DHEX_TO_BYTE_FAILED + 12: 1453+8 016B CB27 SLA A ;shift result to upper 4 bits + 13: 1461+8 016D CB27 SLA A + 14: 1469+8 016F CB27 SLA A + 15: 1477+8 0171 CB27 SLA A + 16: 1485+4 0173 57 LD D,A ;store result in D 17: - 18: 3484+6 0334 23 INC HL ;next byte - 19: 3490+7 0335 7E LD A,(HL) ;load 2nd char (lower) - 20: 3497+17 0336 CD4403 CALL HEX_TO_BIN ;Conv chart to 4bit - 21: 3514+7+5 0339 3805 jr C, DHEX_TO_BYTE_FAILED ;If error jmp to DHEX_TO_BYTE_FAILED - 22: 3521+4 033B B2 OR D ;merge D with accumulator + 18: 1489+6 0174 23 INC HL ;next byte + 19: 1495+7 0175 7E LD A,(HL) ;load 2nd char (lower) + 20: 1502+17 0176 CD8401 CALL HEX_TO_BIN ;Conv chart to 4bit + 21: 1519+7+5 0179 3805 jr C, DHEX_TO_BYTE_FAILED ;If error jmp to DHEX_TO_BYTE_FAILED + 22: 1526+4 017B B2 OR D ;merge D with accumulator 23: - 24: 3525+10 033C E1 POP HL ;restor original pointer - 25: 3535+7 033D 1E00 LD E,0x00 ;set error to 0x00 = no error - 26: 3542+10 033F C9 RET - 27: - 0340 DHEX_TO_BYTE_FAILED: - 28: 3552+7 0340 1EFF LD E,0xFF ;set error to oxFF + 24: 1530+10 017C E1 POP HL ;restor original pointer + 25: 1540+7 017D 1E00 LD E,0x00 ;set error to 0x00 = no error + 26: 1547+10 017F C9 RET + 27: - 0180 DHEX_TO_BYTE_FAILED: + 28: 1557+7 0180 1EFF LD E,0xFF ;set error to oxFF 29: ;LD A,0x00 - 30: 3559+10 0342 E1 POP HL - 31: 3569+10 0343 C9 RET + 30: 1564+10 0182 E1 POP HL + 31: 1574+10 0183 C9 RET 32: 33: ; REG A Contains CHAR-Low 34: ; If failed, Carry is set - 35: - 0344 HEX_TO_BIN: - 36: 3579+7 0344 D630 SUB 48 ; 0 is 0 - 37: 3586+10 0346 EA5903 jp PE, HEX_TO_INVALID_2; to low (SUB overflow) - 38: 3596+7 0349 FE0A CP 10 ; Value is between 0 and 9 - 39: 3603+7+5 034B 3805 JR C, HEX_TO_BIN_2 - 40: 3610+7 034D D607 SUB 7 - 41: 3617+10 034F EA5903 jp PE, HEX_TO_INVALID_2; to low (SUB overflow) - 42: - 0352 HEX_TO_BIN_2: - 43: 3627+7 0352 FE10 CP 16 - 44: 3634+7+5 0354 3003 JR NC, HEX_TO_INVALID_2; if bigger than 15-> fail - 45: 3641+7 0356 E60F AND 0x0F - 46: 3648+10 0358 C9 RET - 47: - 0359 HEX_TO_INVALID_2: - 48: 3658+4 0359 37 SCF ;set carry flag - 49: 3662+10 035A C9 RET + 35: - 0184 HEX_TO_BIN: + 36: 1584+7 0184 D630 SUB 48 ; 0 is 0 + 37: 1591+10 0186 EA9901 jp PE, HEX_TO_INVALID_2; to low (SUB overflow) + 38: 1601+7 0189 FE0A CP 10 ; Value is between 0 and 9 + 39: 1608+7+5 018B 3805 JR C, HEX_TO_BIN_2 + 40: 1615+7 018D D607 SUB 7 + 41: 1622+10 018F EA9901 jp PE, HEX_TO_INVALID_2; to low (SUB overflow) + 42: - 0192 HEX_TO_BIN_2: + 43: 1632+7 0192 FE10 CP 16 + 44: 1639+7+5 0194 3003 JR NC, HEX_TO_INVALID_2; if bigger than 15-> fail + 45: 1646+7 0196 E60F AND 0x0F + 46: 1653+10 0198 C9 RET + 47: - 0199 HEX_TO_INVALID_2: + 48: 1663+4 0199 37 SCF ;set carry flag + 49: 1667+10 019A C9 RET 50: 51: 52: ;***************** @@ -738,37 +437,36 @@ 59: ;Outputs: BC contains 2 Bytes of ASCII (HEX) 60: ; 61: ;Destroys: A, BC, - 62: - 035B STRCONV_BYTES_TO_HEX: - 63: 3672+11 035B F5 PUSH AF;Backup A Register - 64: 3683+4 035C 1F RRA - 65: 3687+4 035D 1F RRA - 66: 3691+4 035E 1F RRA - 67: 3695+4 035F 1F RRA - 68: 3699+17 0360 CD6A03 CALL STRCONV_BYTES_TO_HEX_1 + 62: - 019B STRCONV_BYTES_TO_HEX: + 63: 1677+11 019B F5 PUSH AF;Backup A Register + 64: 1688+4 019C 1F RRA + 65: 1692+4 019D 1F RRA + 66: 1696+4 019E 1F RRA + 67: 1700+4 019F 1F RRA + 68: 1704+17 01A0 CDAA01 CALL STRCONV_BYTES_TO_HEX_1 69: ;LD A,D - 70: 3716+4 0363 47 LD B,A - 71: 3720+10 0364 F1 POP AF ; Reload first Byte - 72: 3730+17 0365 CD6A03 CALL STRCONV_BYTES_TO_HEX_1 + 70: 1721+4 01A3 47 LD B,A + 71: 1725+10 01A4 F1 POP AF ; Reload first Byte + 72: 1735+17 01A5 CDAA01 CALL STRCONV_BYTES_TO_HEX_1 73: ;LD A,D - 74: 3747+4 0368 4F LD C,A - 75: 3751+10 0369 C9 RET + 74: 1752+4 01A8 4F LD C,A + 75: 1756+10 01A9 C9 RET 76: - 77: - 036A STRCONV_BYTES_TO_HEX_1: - 78: 3761+7 036A E60F AND 0x0F - 79: 3768+7 036C C630 ADD 48 - 80: 3775+7 036E FE3A CP 58 ; Check if less than 58 (less than ASCII 9) + 77: - 01AA STRCONV_BYTES_TO_HEX_1: + 78: 1766+7 01AA E60F AND 0x0F + 79: 1773+7 01AC C630 ADD 48 + 80: 1780+7 01AE FE3A CP 58 ; Check if less than 58 (less than ASCII 9) 81: ;JR C, STRCONV_BYTES_TO_HEX_2 - 82: 3782+5+6 0370 D8 RET C - 83: 3787+7 0371 C607 ADD 7 ; A-F - 84: 3794+10 0373 C9 RET - 85: - 0374 STRCONV_BYTES_TO_HEX_2: + 82: 1787+5+6 01B0 D8 RET C + 83: 1792+7 01B1 C607 ADD 7 ; A-F + 84: 1799+10 01B3 C9 RET + 85: - 01B4 STRCONV_BYTES_TO_HEX_2: 86: ;LD D,A - 87: 3804+10 0374 C9 RET + 87: 1809+10 01B4 C9 RET 88: 89: **** main.asm **** - 492: ;.include "basic.s" - 493: .include "disassembler.s" + 168: .include "disassembler.s" **** include/disassembler.s **** 1: - 4110 var_opcode_start equ PRG_RAM_START ;16 bit pointer to opcode in mem 2: - 4112 var_opcode_table equ PRG_RAM_START+2 ;16 bit pointer to opcode in table @@ -780,253 +478,253 @@ 8: - 411A var_bytes_count equ PRG_RAM_START+10 ;bytes to examine 9: ; HL contains start address 10: ; B contains length - 11: - 0375 disassemble: - 12: 3814+4 0375 78 ld a,b - 13: 3818+13 0376 321A41 ld (var_bytes_count),a - 14: - 0379 disassemble_next: + 11: - 01B5 disassemble: + 12: 1819+4 01B5 78 ld a,b + 13: 1823+13 01B6 321A41 ld (var_bytes_count),a + 14: - 01B9 disassemble_next: 15: 16: - 17: 3831+16 0379 221041 ld (var_opcode_start), hl ;16 bit pointer to opcode in mem - 18: 3847+7 037C 7E ld a,(hl) ;load opcode to find in A - 19: 3854+13 037D 321441 ld (var_opcode), a ;8 bit opcode value - 20: 3867+6 0380 23 inc hl - 21: 3873+7 0381 7E ld a,(hl) ;load opcode to find in A - 22: 3880+13 0382 321541 ld (var_opcode_x), a ;8 bit opcode extended value - 23: 3893+6 0385 2B dec hl - 24: 3899+17 0386 CD6904 call disassemble_table_seek - 25: 3916+4 0389 78 ld a,b - 26: 3920+4 038A B1 or c - 27: 3924+10 038B CA4B04 jp z, disassemble_err ;if bc==0000h + 17: 1836+16 01B9 221041 ld (var_opcode_start), hl ;16 bit pointer to opcode in mem + 18: 1852+7 01BC 7E ld a,(hl) ;load opcode to find in A + 19: 1859+13 01BD 321441 ld (var_opcode), a ;8 bit opcode value + 20: 1872+6 01C0 23 inc hl + 21: 1878+7 01C1 7E ld a,(hl) ;load opcode to find in A + 22: 1885+13 01C2 321541 ld (var_opcode_x), a ;8 bit opcode extended value + 23: 1898+6 01C5 2B dec hl + 24: 1904+17 01C6 CDA902 call disassemble_table_seek + 25: 1921+4 01C9 78 ld a,b + 26: 1925+4 01CA B1 or c + 27: 1929+10 01CB CA8B02 jp z, disassemble_err ;if bc==0000h 28: - 29: 3934+20 038E ED431241 ld (var_opcode_table), bc ;16 bit pointer to opcode in table + 29: 1939+20 01CE ED431241 ld (var_opcode_table), bc ;16 bit pointer to opcode in table 30: 31: ;load params - 32: 3954+6 0392 03 inc bc - 33: 3960+6 0393 03 inc bc - 34: 3966+6 0394 03 inc bc - 35: 3972+6 0395 03 inc bc - 36: 3978+7 0396 0A ld a,(bc) - 37: 3985+13 0397 321641 ld (var_opcode_length),A ;8 bit opcode length (in bytes) - 38: 3998+6 039A 03 inc bc - 39: 4004+7 039B 0A ld a, (bc) - 40: 4011+4 039C 5F ld e,a - 41: 4015+6 039D 03 inc bc - 42: 4021+7 039E 0A ld a, (bc) - 43: 4028+4 039F 57 ld d,a - 44: 4032+20 03A0 ED531741 ld (var_opcode_string),de ;16 bit pointer to opcode string - 45: 4052+6 03A4 03 inc bc - 46: 4058+7 03A5 0A ld a,(bc) - 47: 4065+13 03A6 321941 ld (var_opcode_pcount),A ;8 bit opcode param count + 32: 1959+6 01D2 03 inc bc + 33: 1965+6 01D3 03 inc bc + 34: 1971+6 01D4 03 inc bc + 35: 1977+6 01D5 03 inc bc + 36: 1983+7 01D6 0A ld a,(bc) + 37: 1990+13 01D7 321641 ld (var_opcode_length),A ;8 bit opcode length (in bytes) + 38: 2003+6 01DA 03 inc bc + 39: 2009+7 01DB 0A ld a, (bc) + 40: 2016+4 01DC 5F ld e,a + 41: 2020+6 01DD 03 inc bc + 42: 2026+7 01DE 0A ld a, (bc) + 43: 2033+4 01DF 57 ld d,a + 44: 2037+20 01E0 ED531741 ld (var_opcode_string),de ;16 bit pointer to opcode string + 45: 2057+6 01E4 03 inc bc + 46: 2063+7 01E5 0A ld a,(bc) + 47: 2070+13 01E6 321941 ld (var_opcode_pcount),A ;8 bit opcode param count 48: 49: ;values are prepared. Continue with print 50: - 51: 4078+16 03A9 2A1041 ld hl,(var_opcode_start) ;print address - 52: 4094+17 03AC CDB104 call dasm_print16hex_addr + 51: 2083+16 01E9 2A1041 ld hl,(var_opcode_start) ;print address + 52: 2099+17 01EC CDF102 call dasm_print16hex_addr 53: - 54: 4111+13 03AF 3A1641 ld a,(var_opcode_length) - 55: 4124+4 03B2 47 ld b, a + 54: 2116+13 01EF 3A1641 ld a,(var_opcode_length) + 55: 2129+4 01F2 47 ld b, a 56: 57: ;print up to 4 opcode bytes - 58: 4128+16 03B3 2A1041 ld hl,(var_opcode_start) + 58: 2133+16 01F3 2A1041 ld hl,(var_opcode_start) 59: - 60: - 03B6 disassemble_print_opcode_raw - 61: 4144+7 03B6 7E ld a,(hl) ;load first byte - 62: 4151+17 03B7 CDE702 call print_a_hex - 63: 4168+6 03BA 23 inc hl - 64: 4174+8+5 03BB 10F9 djnz disassemble_print_opcode_raw + 60: - 01F6 disassemble_print_opcode_raw + 61: 2149+7 01F6 7E ld a,(hl) ;load first byte + 62: 2156+17 01F7 CD0701 call print_a_hex + 63: 2173+6 01FA 23 inc hl + 64: 2179+8+5 01FB 10F9 djnz disassemble_print_opcode_raw 65: - 66: 4182+7 03BD 3E68 ld a,"h" - 67: 4189+17 03BF CDB702 call print_char + 66: 2187+7 01FD 3E68 ld a,"h" + 67: 2194+17 01FF CDD700 call print_char 68: ;fill empty spots - 69: 4206+13 03C2 3A1641 ld a,(var_opcode_length) - 70: 4219+4 03C5 47 ld b,a - 71: 4223+7 03C6 3E06 ld a,6 - 72: 4230+4 03C8 90 sub b - 73: 4234+4 03C9 47 ld b,a + 69: 2211+13 0202 3A1641 ld a,(var_opcode_length) + 70: 2224+4 0205 47 ld b,a + 71: 2228+7 0206 3E06 ld a,6 + 72: 2235+4 0208 90 sub b + 73: 2239+4 0209 47 ld b,a 74: - 75: - 03CA disassemble_print_opcode_raw_fill: - 76: 4238+7 03CA 3E20 ld a," " - 77: 4245+17 03CC CDB702 call print_char - 78: 4262+7 03CF 3E20 ld a," " - 79: 4269+17 03D1 CDB702 call print_char - 80: 4286+8+5 03D4 10F4 djnz disassemble_print_opcode_raw_fill - 81: 4294+7 03D6 3E20 ld a," " - 82: 4301+17 03D8 CDB702 call print_char + 75: - 020A disassemble_print_opcode_raw_fill: + 76: 2243+7 020A 3E20 ld a," " + 77: 2250+17 020C CDD700 call print_char + 78: 2267+7 020F 3E20 ld a," " + 79: 2274+17 0211 CDD700 call print_char + 80: 2291+8+5 0214 10F4 djnz disassemble_print_opcode_raw_fill + 81: 2299+7 0216 3E20 ld a," " + 82: 2306+17 0218 CDD700 call print_char 83: - 84: 4318+11 03DB E5 push hl + 84: 2323+11 021B E5 push hl 85: ;print opcode - 86: 4329+16 03DC 2A1741 ld hl,(var_opcode_string) - 87: 4345+17 03DF CDBF02 call print_str + 86: 2334+16 021C 2A1741 ld hl,(var_opcode_string) + 87: 2350+17 021F CDDF00 call print_str 88: 89: 90: ;print params - 91: 4362+13 03E2 3A1941 ld a,(var_opcode_pcount) - 92: 4375+4 03E5 B7 or a - 93: 4379+10 03E6 CA4804 jp z, disassemble_print_opcode_params_end ;skip if no params + 91: 2367+13 0222 3A1941 ld a,(var_opcode_pcount) + 92: 2380+4 0225 B7 or a + 93: 2384+10 0226 CA8802 jp z, disassemble_print_opcode_params_end ;skip if no params 94: - 95: 4389+16 03E9 2A1241 ld hl,(var_opcode_table) - 96: 4405+10 03EC 010800 ld bc, 8 - 97: 4415+11 03EF 09 add hl,bc ;hl now has address of first param - 98: 4426+13 03F0 3A1941 ld a,(var_opcode_pcount) - 99: 4439+4 03F3 47 ld b,a - 100: - 03F4 disassemble_print_opcode_params_loop: + 95: 2394+16 0229 2A1241 ld hl,(var_opcode_table) + 96: 2410+10 022C 010800 ld bc, 8 + 97: 2420+11 022F 09 add hl,bc ;hl now has address of first param + 98: 2431+13 0230 3A1941 ld a,(var_opcode_pcount) + 99: 2444+4 0233 47 ld b,a + 100: - 0234 disassemble_print_opcode_params_loop: 101: ;ld a,(hl) ;load param 102: ;call print_a_hex - 103: 4443+7 03F4 7E ld a,(hl) ;load param + 103: 2448+7 0234 7E ld a,(hl) ;load param 104: - 105: 4450+7 03F5 FE01 cp 0x01 - 106: 4457+10+7 03F7 CCD704 call z, param_01 - 107: 4467+7 03FA FE02 cp 0x02 - 108: 4474+10+7 03FC CCFE04 call z, param_02 - 109: 4484+7 03FF FE03 cp 0x03 - 110: 4491+10+7 0401 CC1B05 call z, param_03 - 111: 4501+7 0404 FE04 cp 0x04 - 112: 4508+10+7 0406 CC5705 call z, param_04 - 113: 4518+7 0409 FE05 cp 0x05 - 114: 4525+10+7 040B CC6D05 call z, param_05 - 115: 4535+7 040E FE06 cp 0x06 - 116: 4542+10+7 0410 CC7A05 call z, param_06 - 117: 4552+7 0413 FE07 cp 0x07 - 118: 4559+10+7 0415 CC9405 call z, param_07 - 119: 4569+7 0418 FE08 cp 0x08 - 120: 4576+10+7 041A CCA105 call z, param_08 - 121: 4586+7 041D FE09 cp 0x09 - 122: 4593+10+7 041F CCB605 call z, param_09 - 123: 4603+7 0422 FE10 cp 0x10 - 124: 4610+10+7 0424 CCCB05 call z, param_10 - 125: 4620+7 0427 FE11 cp 0x11 - 126: 4627+10+7 0429 CCDB05 call z, param_11 - 127: 4637+7 042C FE12 cp 0x12 - 128: 4644+10+7 042E CCE305 call z, param_12 - 129: 4654+7 0431 FE13 cp 0x13 - 130: 4661+10+7 0433 CC1B06 call z, param_13 - 131: 4671+7 0436 FE0A cp 0x0A - 132: 4678+10+7 0438 CCAD05 call z, param_0A + 105: 2455+7 0235 FE01 cp 0x01 + 106: 2462+10+7 0237 CC1703 call z, param_01 + 107: 2472+7 023A FE02 cp 0x02 + 108: 2479+10+7 023C CC3E03 call z, param_02 + 109: 2489+7 023F FE03 cp 0x03 + 110: 2496+10+7 0241 CC5B03 call z, param_03 + 111: 2506+7 0244 FE04 cp 0x04 + 112: 2513+10+7 0246 CC9703 call z, param_04 + 113: 2523+7 0249 FE05 cp 0x05 + 114: 2530+10+7 024B CCAD03 call z, param_05 + 115: 2540+7 024E FE06 cp 0x06 + 116: 2547+10+7 0250 CCBA03 call z, param_06 + 117: 2557+7 0253 FE07 cp 0x07 + 118: 2564+10+7 0255 CCD403 call z, param_07 + 119: 2574+7 0258 FE08 cp 0x08 + 120: 2581+10+7 025A CCE103 call z, param_08 + 121: 2591+7 025D FE09 cp 0x09 + 122: 2598+10+7 025F CCF603 call z, param_09 + 123: 2608+7 0262 FE10 cp 0x10 + 124: 2615+10+7 0264 CC0B04 call z, param_10 + 125: 2625+7 0267 FE11 cp 0x11 + 126: 2632+10+7 0269 CC1B04 call z, param_11 + 127: 2642+7 026C FE12 cp 0x12 + 128: 2649+10+7 026E CC2304 call z, param_12 + 129: 2659+7 0271 FE13 cp 0x13 + 130: 2666+10+7 0273 CC5B04 call z, param_13 + 131: 2676+7 0276 FE0A cp 0x0A + 132: 2683+10+7 0278 CCED03 call z, param_0A 133: ;strings - 134: 4688+7 043B FE80 cp 0x80 - 135: 4695+10+7 043D CC3A06 call z, param_80 - 136: 4705+7 0440 FE81 cp 0x81 - 137: 4712+10+7 0442 CC3106 call z, param_81 - 138: 4722+6 0445 23 inc hl - 139: 4728+8+5 0446 10AC djnz disassemble_print_opcode_params_loop - 140: - 0448 disassemble_print_opcode_params_end: - 141: 4736+10 0448 E1 pop hl - 142: 4746+12 0449 1810 jr disassemble_continue + 134: 2693+7 027B FE80 cp 0x80 + 135: 2700+10+7 027D CC7A04 call z, param_80 + 136: 2710+7 0280 FE81 cp 0x81 + 137: 2717+10+7 0282 CC7104 call z, param_81 + 138: 2727+6 0285 23 inc hl + 139: 2733+8+5 0286 10AC djnz disassemble_print_opcode_params_loop + 140: - 0288 disassemble_print_opcode_params_end: + 141: 2741+10 0288 E1 pop hl + 142: 2751+12 0289 1810 jr disassemble_continue 143: 144: - 145: - 044B disassemble_err: - 146: 4758+17 044B CDB104 call dasm_print16hex_addr - 147: 4775+7 044E 7E ld a,(hl) - 148: 4782+17 044F CDC904 call dasm_print8hex ;print value - 149: 4799+6 0452 23 inc hl - 150: 4805+11 0453 E5 push hl - 151: 4816+10 0454 21860E ld hl, [dasm_UU] - 152: 4826+17 0457 CDBF02 call print_str - 153: 4843+10 045A E1 pop hl + 145: - 028B disassemble_err: + 146: 2763+17 028B CDF102 call dasm_print16hex_addr + 147: 2780+7 028E 7E ld a,(hl) + 148: 2787+17 028F CD0903 call dasm_print8hex ;print value + 149: 2804+6 0292 23 inc hl + 150: 2810+11 0293 E5 push hl + 151: 2821+10 0294 21C60C ld hl, [dasm_UU] + 152: 2831+17 0297 CDDF00 call print_str + 153: 2848+10 029A E1 pop hl 154: - 155: - 045B disassemble_continue: + 155: - 029B disassemble_continue: 156: - 157: 4853+17 045B CDD102 call print_newLine + 157: 2858+17 029B CDF100 call print_newLine 158: ;inc hl - 159: 4870+13 045E 3A1A41 ld a,(var_bytes_count) - 160: 4883+4 0461 3D dec a - 161: 4887+13 0462 321A41 ld (var_bytes_count),a - 162: 4900+10 0465 C27903 jp nz, disassemble_next - 163: 4910+10 0468 C9 ret + 159: 2875+13 029E 3A1A41 ld a,(var_bytes_count) + 160: 2888+4 02A1 3D dec a + 161: 2892+13 02A2 321A41 ld (var_bytes_count),a + 162: 2905+10 02A5 C2B901 jp nz, disassemble_next + 163: 2915+10 02A8 C9 ret 164: 165: 166: 167: ;A contains opcode 168: ;BC contains returned position - 169: - 0469 disassemble_table_seek: - 170: 4920+11 0469 E5 push hl - 171: 4931+10 046A 218406 ld hl, [dasm_opcode_table] - 172: - 046D disassemble_table_seek_loop: - 173: 4941+13 046D 3A1441 ld a,(var_opcode) - 174: 4954+4 0470 4F ld c,a - 175: 4958+7 0471 7E ld a,(hl) - 176: 4965+7 0472 FEFF cp 0xFF ; if null - 177: 4972+10 0474 CAAB04 jp z, disassemble_table_notfound + 169: - 02A9 disassemble_table_seek: + 170: 2925+11 02A9 E5 push hl + 171: 2936+10 02AA 21C404 ld hl, [dasm_opcode_table] + 172: - 02AD disassemble_table_seek_loop: + 173: 2946+13 02AD 3A1441 ld a,(var_opcode) + 174: 2959+4 02B0 4F ld c,a + 175: 2963+7 02B1 7E ld a,(hl) + 176: 2970+7 02B2 FEFF cp 0xFF ; if null + 177: 2977+10 02B4 CAEB02 jp z, disassemble_table_notfound 178: 179: ;apply mask - 180: 4982+11 0477 F5 push af - 181: 4993+6 0478 23 inc hl - 182: 4999+7 0479 46 ld b,(hl) ;load mask - 183: 5006+6 047A 2B dec hl - 184: 5012+4 047B 79 ld a,c - 185: 5016+4 047C A0 and b ;apply mask - 186: 5020+4 047D 4F ld c,a - 187: 5024+10 047E F1 pop af + 180: 2987+11 02B7 F5 push af + 181: 2998+6 02B8 23 inc hl + 182: 3004+7 02B9 46 ld b,(hl) ;load mask + 183: 3011+6 02BA 2B dec hl + 184: 3017+4 02BB 79 ld a,c + 185: 3021+4 02BC A0 and b ;apply mask + 186: 3025+4 02BD 4F ld c,a + 187: 3029+10 02BE F1 pop af 188: - 189: 5034+4 047F B9 cp c ; if match - 190: 5038+7+5 0480 280B jr z, disassemble_table_first_match - 191: 5045+7 0482 0600 ld b,0 - 192: 5052+7 0484 0E07 ld c,7 - 193: 5059+11 0486 09 add hl,bc - 194: 5070+7 0487 7E ld a,(hl) - 195: 5077+4 0488 4F ld c,a - 196: 5081+11 0489 09 add hl,bc - 197: 5092+6 048A 23 inc hl - 198: 5098+12 048B 18E0 jr disassemble_table_seek_loop + 189: 3039+4 02BF B9 cp c ; if match + 190: 3043+7+5 02C0 280B jr z, disassemble_table_first_match + 191: 3050+7 02C2 0600 ld b,0 + 192: 3057+7 02C4 0E07 ld c,7 + 193: 3064+11 02C6 09 add hl,bc + 194: 3075+7 02C7 7E ld a,(hl) + 195: 3082+4 02C8 4F ld c,a + 196: 3086+11 02C9 09 add hl,bc + 197: 3097+6 02CA 23 inc hl + 198: 3103+12 02CB 18E0 jr disassemble_table_seek_loop 199: - 200: - 048D disassemble_table_first_match - 201: 5110+6 048D 23 inc hl - 202: 5116+6 048E 23 inc hl - 203: 5122+7 048F 4E ld c,(hl) ;load opcode x from table - 204: 5129+6 0490 23 inc hl - 205: 5135+13 0491 3A1541 ld a,(var_opcode_x) ;load current opcode x - 206: 5148+7 0494 46 ld b,(hl) ;load mask - 207: 5155+4 0495 A0 and b ;apply mask - 208: 5159+4 0496 B9 cp c ;compare to table - 209: 5163+6 0497 2B dec hl - 210: 5169+6 0498 2B dec hl - 211: 5175+6 0499 2B dec hl - 212: 5181+7+5 049A 280B jr z, disassemble_table_found ;IF FOUND - 213: 5188+7 049C 0600 ld b,0 ;else continue with next + 200: - 02CD disassemble_table_first_match + 201: 3115+6 02CD 23 inc hl + 202: 3121+6 02CE 23 inc hl + 203: 3127+7 02CF 4E ld c,(hl) ;load opcode x from table + 204: 3134+6 02D0 23 inc hl + 205: 3140+13 02D1 3A1541 ld a,(var_opcode_x) ;load current opcode x + 206: 3153+7 02D4 46 ld b,(hl) ;load mask + 207: 3160+4 02D5 A0 and b ;apply mask + 208: 3164+4 02D6 B9 cp c ;compare to table + 209: 3168+6 02D7 2B dec hl + 210: 3174+6 02D8 2B dec hl + 211: 3180+6 02D9 2B dec hl + 212: 3186+7+5 02DA 280B jr z, disassemble_table_found ;IF FOUND + 213: 3193+7 02DC 0600 ld b,0 ;else continue with next 214: - 215: 5195+7 049E 0E07 ld c,7 - 216: 5202+11 04A0 09 add hl,bc - 217: 5213+7 04A1 7E ld a,(hl) - 218: 5220+4 04A2 4F ld c,a - 219: 5224+11 04A3 09 add hl,bc - 220: 5235+6 04A4 23 inc hl - 221: 5241+12 04A5 18C6 jr disassemble_table_seek_loop + 215: 3200+7 02DE 0E07 ld c,7 + 216: 3207+11 02E0 09 add hl,bc + 217: 3218+7 02E1 7E ld a,(hl) + 218: 3225+4 02E2 4F ld c,a + 219: 3229+11 02E3 09 add hl,bc + 220: 3240+6 02E4 23 inc hl + 221: 3246+12 02E5 18C6 jr disassemble_table_seek_loop 222: - 223: - 04A7 disassemble_table_found - 224: 5253+4 04A7 44 ld b,H - 225: 5257+4 04A8 4D ld c,l - 226: 5261+10 04A9 E1 pop hl - 227: 5271+10 04AA C9 ret + 223: - 02E7 disassemble_table_found + 224: 3258+4 02E7 44 ld b,H + 225: 3262+4 02E8 4D ld c,l + 226: 3266+10 02E9 E1 pop hl + 227: 3276+10 02EA C9 ret 228: - 229: - 04AB disassemble_table_notfound - 230: 5281+7 04AB 0600 ld b,0 - 231: 5288+7 04AD 0E00 ld c,0 - 232: 5295+10 04AF E1 pop hl - 233: 5305+10 04B0 C9 ret + 229: - 02EB disassemble_table_notfound + 230: 3286+7 02EB 0600 ld b,0 + 231: 3293+7 02ED 0E00 ld c,0 + 232: 3300+10 02EF E1 pop hl + 233: 3310+10 02F0 C9 ret 234: 235: 236: 237: - 238: - 04B1 dasm_print16hex_addr: - 239: 5315+7 04B1 3E24 ld a,"$" - 240: 5322+17 04B3 CDB702 call print_char - 241: 5339+4 04B6 7C ld a,h - 242: 5343+17 04B7 CDE702 call print_a_hex - 243: 5360+4 04BA 7D ld a,l - 244: 5364+17 04BB CDE702 call print_a_hex - 245: 5381+7 04BE 3E68 ld a,"h" - 246: 5388+17 04C0 CDB702 call print_char - 247: 5405+7 04C3 3E20 ld a," " - 248: 5412+17 04C5 CDB702 call print_char - 249: 5429+10 04C8 C9 ret + 238: - 02F1 dasm_print16hex_addr: + 239: 3320+7 02F1 3E24 ld a,"$" + 240: 3327+17 02F3 CDD700 call print_char + 241: 3344+4 02F6 7C ld a,h + 242: 3348+17 02F7 CD0701 call print_a_hex + 243: 3365+4 02FA 7D ld a,l + 244: 3369+17 02FB CD0701 call print_a_hex + 245: 3386+7 02FE 3E68 ld a,"h" + 246: 3393+17 0300 CDD700 call print_char + 247: 3410+7 0303 3E20 ld a," " + 248: 3417+17 0305 CDD700 call print_char + 249: 3434+10 0308 C9 ret 250: - 251: - 04C9 dasm_print8hex: - 252: 5439+17 04C9 CDE702 call print_a_hex - 253: 5456+7 04CC 3E68 ld a,"h" - 254: 5463+17 04CE CDB702 call print_char - 255: 5480+7 04D1 3E20 ld a," " - 256: 5487+17 04D3 CDB702 call print_char - 257: 5504+10 04D6 C9 ret + 251: - 0309 dasm_print8hex: + 252: 3444+17 0309 CD0701 call print_a_hex + 253: 3461+7 030C 3E68 ld a,"h" + 254: 3468+17 030E CDD700 call print_char + 255: 3485+7 0311 3E20 ld a," " + 256: 3492+17 0313 CDD700 call print_char + 257: 3509+10 0316 C9 ret 258: 259: 260: @@ -1034,317 +732,317 @@ 262: 263: 264: - 265: - 04D7 param_01: ; 0x01 16bit address pointer - 266: 5514+11 04D7 E5 push hl - 267: 5525+20 04D8 ED5B1041 ld de,(var_opcode_start) - 268: 5545+6 04DC 13 inc de - 269: 5551+7 04DD 1A ld a,(de) - 270: 5558+4 04DE 6F ld l,a - 271: 5562+6 04DF 13 inc de - 272: 5568+7 04E0 1A ld a,(de) - 273: 5575+4 04E1 67 ld h,a + 265: - 0317 param_01: ; 0x01 16bit address pointer + 266: 3519+11 0317 E5 push hl + 267: 3530+20 0318 ED5B1041 ld de,(var_opcode_start) + 268: 3550+6 031C 13 inc de + 269: 3556+7 031D 1A ld a,(de) + 270: 3563+4 031E 6F ld l,a + 271: 3567+6 031F 13 inc de + 272: 3573+7 0320 1A ld a,(de) + 273: 3580+4 0321 67 ld h,a 274: - 275: 5579+7 04E2 3E24 ld a,"$" - 276: 5586+17 04E4 CDB702 call print_char - 277: 5603+4 04E7 7C ld a,h - 278: 5607+17 04E8 CDE702 call print_a_hex - 279: 5624+4 04EB 7D ld a,l - 280: 5628+17 04EC CDE702 call print_a_hex - 281: 5645+7 04EF 3E68 ld a,"h" - 282: 5652+17 04F1 CDB702 call print_char - 283: 5669+7 04F4 3E20 ld a," " - 284: 5676+17 04F6 CDB702 call print_char - 285: 5693+17 04F9 CD7506 call param_comma - 286: 5710+10 04FC E1 pop hl - 287: 5720+10 04FD C9 ret + 275: 3584+7 0322 3E24 ld a,"$" + 276: 3591+17 0324 CDD700 call print_char + 277: 3608+4 0327 7C ld a,h + 278: 3612+17 0328 CD0701 call print_a_hex + 279: 3629+4 032B 7D ld a,l + 280: 3633+17 032C CD0701 call print_a_hex + 281: 3650+7 032F 3E68 ld a,"h" + 282: 3657+17 0331 CDD700 call print_char + 283: 3674+7 0334 3E20 ld a," " + 284: 3681+17 0336 CDD700 call print_char + 285: 3698+17 0339 CDB504 call param_comma + 286: 3715+10 033C E1 pop hl + 287: 3725+10 033D C9 ret 288: - 289: - 04FE param_02: - 290: 5730+11 04FE C5 push bc - 291: 5741+20 04FF ED5B1041 ld de,(var_opcode_start) - 292: 5761+7 0503 1A ld a,(de) - 293: 5768+4 0504 1F rra - 294: 5772+4 0505 1F rra - 295: 5776+7 0506 E60E and 0x0E + 289: - 033E param_02: + 290: 3735+11 033E C5 push bc + 291: 3746+20 033F ED5B1041 ld de,(var_opcode_start) + 292: 3766+7 0343 1A ld a,(de) + 293: 3773+4 0344 1F rra + 294: 3777+4 0345 1F rra + 295: 3781+7 0346 E60E and 0x0E 296: - 297: 5783+11 0508 E5 push hl - 298: 5794+10 0509 218F0E ld hl, [dasm_printFlags_table] - 299: 5804+7 050C 0600 ld b,0 - 300: 5811+4 050E 4F ld c,a - 301: 5815+11 050F 09 add hl,bc - 302: 5826+17 0510 CDBF02 call print_str - 303: 5843+7 0513 3E20 ld a, " " - 304: 5850+17 0515 CDB702 call print_char - 305: 5867+10 0518 E1 pop hl - 306: 5877+10 0519 C1 pop bc - 307: 5887+10 051A C9 ret + 297: 3788+11 0348 E5 push hl + 298: 3799+10 0349 21CF0C ld hl, [dasm_printFlags_table] + 299: 3809+7 034C 0600 ld b,0 + 300: 3816+4 034E 4F ld c,a + 301: 3820+11 034F 09 add hl,bc + 302: 3831+17 0350 CDDF00 call print_str + 303: 3848+7 0353 3E20 ld a, " " + 304: 3855+17 0355 CDD700 call print_char + 305: 3872+10 0358 E1 pop hl + 306: 3882+10 0359 C1 pop bc + 307: 3892+10 035A C9 ret 308: 309: - 310: - 051B param_03: - 311: 5897+20 051B ED5B1041 ld de,(var_opcode_start) - 312: 5917+6 051F 13 inc de - 313: 5923+7 0520 1A ld a,(de) + 310: - 035B param_03: + 311: 3902+20 035B ED5B1041 ld de,(var_opcode_start) + 312: 3922+6 035F 13 inc de + 313: 3928+7 0360 1A ld a,(de) 314: - 315: 5930+11 0521 F5 push af - 316: 5941+7 0522 E680 and 0x80 - 317: 5948+10 0524 C23C05 jp nz, param_03_neg - 318: 5958+7 0527 3E24 ld a,"$" - 319: 5965+17 0529 CDB702 call print_char - 320: 5982+7 052C 3E2B ld a,"+" - 321: 5989+17 052E CDB702 call print_char - 322: 6006+10 0531 F1 pop af - 323: 6016+17 0532 CDE702 call print_a_hex - 324: 6033+7 0535 3E68 ld a,"h" - 325: 6040+17 0537 CDB702 call print_char - 326: 6057+12 053A 1817 jr param_03_done + 315: 3935+11 0361 F5 push af + 316: 3946+7 0362 E680 and 0x80 + 317: 3953+10 0364 C27C03 jp nz, param_03_neg + 318: 3963+7 0367 3E24 ld a,"$" + 319: 3970+17 0369 CDD700 call print_char + 320: 3987+7 036C 3E2B ld a,"+" + 321: 3994+17 036E CDD700 call print_char + 322: 4011+10 0371 F1 pop af + 323: 4021+17 0372 CD0701 call print_a_hex + 324: 4038+7 0375 3E68 ld a,"h" + 325: 4045+17 0377 CDD700 call print_char + 326: 4062+12 037A 1817 jr param_03_done 327: - 328: - 053C param_03_neg: - 329: 6069+7 053C 3E24 ld a,"$" - 330: 6076+17 053E CDB702 call print_char - 331: 6093+7 0541 3E2D ld a,"-" - 332: 6100+17 0543 CDB702 call print_char - 333: 6117+10 0546 F1 pop af - 334: 6127+8 0547 ED44 neg - 335: 6135+17 0549 CDE702 call print_a_hex - 336: 6152+7 054C 3E68 ld a,"h" - 337: 6159+17 054E CDB702 call print_char - 338: 6176+12 0551 1800 jr param_03_done + 328: - 037C param_03_neg: + 329: 4074+7 037C 3E24 ld a,"$" + 330: 4081+17 037E CDD700 call print_char + 331: 4098+7 0381 3E2D ld a,"-" + 332: 4105+17 0383 CDD700 call print_char + 333: 4122+10 0386 F1 pop af + 334: 4132+8 0387 ED44 neg + 335: 4140+17 0389 CD0701 call print_a_hex + 336: 4157+7 038C 3E68 ld a,"h" + 337: 4164+17 038E CDD700 call print_char + 338: 4181+12 0391 1800 jr param_03_done 339: - 340: - 0553 param_03_done: - 341: 6188+17 0553 CD7506 call param_comma - 342: 6205+10 0556 C9 ret + 340: - 0393 param_03_done: + 341: 4193+17 0393 CDB504 call param_comma + 342: 4210+10 0396 C9 ret 343: 344: - 345: - 0557 param_04: - 346: 6215+20 0557 ED5B1041 ld de,(var_opcode_start) - 347: 6235+6 055B 13 inc de - 348: 6241+7 055C 1A ld a,(de) - 349: 6248+7 055D FE4D cp 0x4D - 350: 6255+7+5 055F 2806 jr z,param_04_i - 351: 6262+7 0561 3E4E ld a,"N" - 352: 6269+17 0563 CDB702 call print_char - 353: 6286+10 0566 C9 ret - 354: - 0567 param_04_i: - 355: 6296+7 0567 3E49 ld a,"I" - 356: 6303+17 0569 CDB702 call print_char - 357: 6320+10 056C C9 ret + 345: - 0397 param_04: + 346: 4220+20 0397 ED5B1041 ld de,(var_opcode_start) + 347: 4240+6 039B 13 inc de + 348: 4246+7 039C 1A ld a,(de) + 349: 4253+7 039D FE4D cp 0x4D + 350: 4260+7+5 039F 2806 jr z,param_04_i + 351: 4267+7 03A1 3E4E ld a,"N" + 352: 4274+17 03A3 CDD700 call print_char + 353: 4291+10 03A6 C9 ret + 354: - 03A7 param_04_i: + 355: 4301+7 03A7 3E49 ld a,"I" + 356: 4308+17 03A9 CDD700 call print_char + 357: 4325+10 03AC C9 ret 358: - 359: - 056D param_05: - 360: 6330+11 056D C5 push bc - 361: 6341+20 056E ED5B1041 ld de,(var_opcode_start) - 362: 6361+7 0572 1A ld a,(de) - 363: 6368+7 0573 E638 and 0x38 + 359: - 03AD param_05: + 360: 4335+11 03AD C5 push bc + 361: 4346+20 03AE ED5B1041 ld de,(var_opcode_start) + 362: 4366+7 03B2 1A ld a,(de) + 363: 4373+7 03B3 E638 and 0x38 364: ; print hex char - 365: 6375+17 0575 CDC904 call dasm_print8hex - 366: 6392+10 0578 C1 pop bc - 367: 6402+10 0579 C9 ret + 365: 4380+17 03B5 CD0903 call dasm_print8hex + 366: 4397+10 03B8 C1 pop bc + 367: 4407+10 03B9 C9 ret 368: 369: - 370: - 057A param_06: - 371: 6412+11 057A C5 push bc - 372: 6423+20 057B ED5B1041 ld de,(var_opcode_start) - 373: 6443+7 057F 1A ld a,(de) - 374: 6450+4 0580 1F rra - 375: 6454+4 0581 1F rra - 376: 6458+4 0582 1F rra - 377: 6462+7 0583 E607 and 0x07 - 378: 6469+17 0585 CD5006 call param_printRegister - 379: 6486+7 0588 3E20 ld a," " - 380: 6493+17 058A CDB702 call print_char - 381: 6510+7 058D 3E2C ld a,"," - 382: 6517+17 058F CDB702 call print_char - 383: 6534+10 0592 C1 pop bc - 384: 6544+10 0593 C9 ret + 370: - 03BA param_06: + 371: 4417+11 03BA C5 push bc + 372: 4428+20 03BB ED5B1041 ld de,(var_opcode_start) + 373: 4448+7 03BF 1A ld a,(de) + 374: 4455+4 03C0 1F rra + 375: 4459+4 03C1 1F rra + 376: 4463+4 03C2 1F rra + 377: 4467+7 03C3 E607 and 0x07 + 378: 4474+17 03C5 CD9004 call param_printRegister + 379: 4491+7 03C8 3E20 ld a," " + 380: 4498+17 03CA CDD700 call print_char + 381: 4515+7 03CD 3E2C ld a,"," + 382: 4522+17 03CF CDD700 call print_char + 383: 4539+10 03D2 C1 pop bc + 384: 4549+10 03D3 C9 ret 385: - 386: - 0594 param_07: - 387: 6554+11 0594 C5 push bc - 388: 6565+20 0595 ED5B1041 ld de,(var_opcode_start) - 389: 6585+7 0599 1A ld a,(de) - 390: 6592+7 059A E607 and 0x07 + 386: - 03D4 param_07: + 387: 4559+11 03D4 C5 push bc + 388: 4570+20 03D5 ED5B1041 ld de,(var_opcode_start) + 389: 4590+7 03D9 1A ld a,(de) + 390: 4597+7 03DA E607 and 0x07 391: - 392: 6599+17 059C CD5006 call param_printRegister - 393: 6616+10 059F C1 pop bc - 394: 6626+10 05A0 C9 ret + 392: 4604+17 03DC CD9004 call param_printRegister + 393: 4621+10 03DF C1 pop bc + 394: 4631+10 03E0 C9 ret 395: - 396: - 05A1 param_08: - 397: 6636+11 05A1 C5 push bc - 398: 6647+20 05A2 ED5B1041 ld de,(var_opcode_start) - 399: 6667+6 05A6 13 inc de - 400: 6673+7 05A7 1A ld a,(de) - 401: 6680+17 05A8 CDC904 call dasm_print8hex - 402: 6697+10 05AB C1 pop bc - 403: 6707+10 05AC C9 ret + 396: - 03E1 param_08: + 397: 4641+11 03E1 C5 push bc + 398: 4652+20 03E2 ED5B1041 ld de,(var_opcode_start) + 399: 4672+6 03E6 13 inc de + 400: 4678+7 03E7 1A ld a,(de) + 401: 4685+17 03E8 CD0903 call dasm_print8hex + 402: 4702+10 03EB C1 pop bc + 403: 4712+10 03EC C9 ret 404: 405: - 406: - 05AD param_0A: - 407: 6717+11 05AD E5 push hl - 408: 6728+20 05AE ED5B1041 ld de,(var_opcode_start) - 409: 6748+6 05B2 13 inc de - 410: 6754+6 05B3 13 inc de - 411: 6760+12 05B4 1806 jr param_09_0A - 412: - 05B6 param_09: - 413: 6772+11 05B6 E5 push hl - 414: 6783+20 05B7 ED5B1041 ld de,(var_opcode_start) - 415: 6803+6 05BB 13 inc de - 416: - 05BC param_09_0A: - 417: 6809+7 05BC 1A ld a,(de) - 418: 6816+4 05BD 6F ld l,a - 419: 6820+6 05BE 13 inc de - 420: 6826+7 05BF 1A ld a,(de) - 421: 6833+4 05C0 67 ld h,a - 422: 6837+4 05C1 7C ld a,h - 423: 6841+17 05C2 CDE702 call print_a_hex - 424: 6858+4 05C5 7D ld a,l - 425: 6862+17 05C6 CDE702 call print_a_hex - 426: 6879+10 05C9 E1 pop hl - 427: 6889+10 05CA C9 ret + 406: - 03ED param_0A: + 407: 4722+11 03ED E5 push hl + 408: 4733+20 03EE ED5B1041 ld de,(var_opcode_start) + 409: 4753+6 03F2 13 inc de + 410: 4759+6 03F3 13 inc de + 411: 4765+12 03F4 1806 jr param_09_0A + 412: - 03F6 param_09: + 413: 4777+11 03F6 E5 push hl + 414: 4788+20 03F7 ED5B1041 ld de,(var_opcode_start) + 415: 4808+6 03FB 13 inc de + 416: - 03FC param_09_0A: + 417: 4814+7 03FC 1A ld a,(de) + 418: 4821+4 03FD 6F ld l,a + 419: 4825+6 03FE 13 inc de + 420: 4831+7 03FF 1A ld a,(de) + 421: 4838+4 0400 67 ld h,a + 422: 4842+4 0401 7C ld a,h + 423: 4846+17 0402 CD0701 call print_a_hex + 424: 4863+4 0405 7D ld a,l + 425: 4867+17 0406 CD0701 call print_a_hex + 426: 4884+10 0409 E1 pop hl + 427: 4894+10 040A C9 ret 428: - 429: - 05CB param_10: - 430: 6899+11 05CB C5 push bc - 431: 6910+20 05CC ED5B1041 ld de,(var_opcode_start) - 432: 6930+7 05D0 1A ld a,(de) - 433: 6937+4 05D1 1F rra - 434: 6941+4 05D2 1F rra - 435: 6945+4 05D3 1F rra - 436: 6949+7 05D4 E607 and 0x07 - 437: 6956+17 05D6 CD5006 call param_printRegister - 438: 6973+10 05D9 C1 pop bc - 439: 6983+10 05DA C9 ret + 429: - 040B param_10: + 430: 4904+11 040B C5 push bc + 431: 4915+20 040C ED5B1041 ld de,(var_opcode_start) + 432: 4935+7 0410 1A ld a,(de) + 433: 4942+4 0411 1F rra + 434: 4946+4 0412 1F rra + 435: 4950+4 0413 1F rra + 436: 4954+7 0414 E607 and 0x07 + 437: 4961+17 0416 CD9004 call param_printRegister + 438: 4978+10 0419 C1 pop bc + 439: 4988+10 041A C9 ret 440: 441: - 442: - 05DB param_11: - 443: 6993+11 05DB E5 push hl - 444: 7004+11 05DC C5 push bc - 445: 7015+20 05DD ED5B1041 ld de,(var_opcode_start) - 446: 7035+12 05E1 1807 jr param_11_12 - 447: - 05E3 param_12: - 448: 7047+11 05E3 E5 push hl - 449: 7058+11 05E4 C5 push bc - 450: 7069+20 05E5 ED5B1041 ld de,(var_opcode_start) - 451: 7089+6 05E9 13 inc de + 442: - 041B param_11: + 443: 4998+11 041B E5 push hl + 444: 5009+11 041C C5 push bc + 445: 5020+20 041D ED5B1041 ld de,(var_opcode_start) + 446: 5040+12 0421 1807 jr param_11_12 + 447: - 0423 param_12: + 448: 5052+11 0423 E5 push hl + 449: 5063+11 0424 C5 push bc + 450: 5074+20 0425 ED5B1041 ld de,(var_opcode_start) + 451: 5094+6 0429 13 inc de 452: - 453: - 05EA param_11_12: - 454: 7095+7 05EA 1A ld a,(de) - 455: 7102+4 05EB 1F rra - 456: 7106+4 05EC 1F rra - 457: 7110+4 05ED 1F rra - 458: 7114+7 05EE E606 and 0x06 - 459: 7121+11 05F0 F5 push af + 453: - 042A param_11_12: + 454: 5100+7 042A 1A ld a,(de) + 455: 5107+4 042B 1F rra + 456: 5111+4 042C 1F rra + 457: 5115+4 042D 1F rra + 458: 5119+7 042E E606 and 0x06 + 459: 5126+11 0430 F5 push af 460: ;check which table to use - 461: 7132+16 05F1 2A1041 ld hl, (var_opcode_start) - 462: 7148+7 05F4 7E ld a,(hl) - 463: 7155+7 05F5 FEDD cp 0xDD - 464: 7162+7+5 05F7 2809 jr z,param_11_12_ix - 465: 7169+7 05F9 FEFD cp 0xFD - 466: 7176+7+5 05FB 280A jr z,param_11_12_iy - 467: - 05FD param_11_12_def: - 468: 7183+10 05FD 219F0E ld hl, [dasm_printRegister8_table] - 469: 7193+12 0600 1808 jr param_11_12_all - 470: - 0602 param_11_12_ix: - 471: 7205+10 0602 21A70E ld hl, [dasm_printRegisterIX_table] - 472: 7215+12 0605 1803 jr param_11_12_all - 473: - 0607 param_11_12_iy: - 474: 7227+10 0607 21AF0E ld hl, [dasm_printRegisterIY_table] - 475: - 060A param_11_12_all: - 476: 7237+10 060A F1 pop af - 477: 7247+7 060B 0600 ld b,0 - 478: 7254+4 060D 4F ld c,a - 479: 7258+11 060E 09 add hl, bc - 480: 7269+7 060F 7E ld a,(hl) - 481: 7276+17 0610 CDB702 call print_char - 482: 7293+6 0613 23 inc hl - 483: 7299+7 0614 7E ld a,(hl) - 484: 7306+17 0615 CDB702 call print_char - 485: 7323+10 0618 C1 pop bc - 486: 7333+10 0619 E1 pop hl - 487: 7343+10 061A C9 ret + 461: 5137+16 0431 2A1041 ld hl, (var_opcode_start) + 462: 5153+7 0434 7E ld a,(hl) + 463: 5160+7 0435 FEDD cp 0xDD + 464: 5167+7+5 0437 2809 jr z,param_11_12_ix + 465: 5174+7 0439 FEFD cp 0xFD + 466: 5181+7+5 043B 280A jr z,param_11_12_iy + 467: - 043D param_11_12_def: + 468: 5188+10 043D 21DF0C ld hl, [dasm_printRegister8_table] + 469: 5198+12 0440 1808 jr param_11_12_all + 470: - 0442 param_11_12_ix: + 471: 5210+10 0442 21E70C ld hl, [dasm_printRegisterIX_table] + 472: 5220+12 0445 1803 jr param_11_12_all + 473: - 0447 param_11_12_iy: + 474: 5232+10 0447 21EF0C ld hl, [dasm_printRegisterIY_table] + 475: - 044A param_11_12_all: + 476: 5242+10 044A F1 pop af + 477: 5252+7 044B 0600 ld b,0 + 478: 5259+4 044D 4F ld c,a + 479: 5263+11 044E 09 add hl, bc + 480: 5274+7 044F 7E ld a,(hl) + 481: 5281+17 0450 CDD700 call print_char + 482: 5298+6 0453 23 inc hl + 483: 5304+7 0454 7E ld a,(hl) + 484: 5311+17 0455 CDD700 call print_char + 485: 5328+10 0458 C1 pop bc + 486: 5338+10 0459 E1 pop hl + 487: 5348+10 045A C9 ret 488: - 489: - 061B param_13: - 490: 7353+11 061B E5 push hl - 491: 7364+11 061C C5 push bc - 492: 7375+20 061D ED5B1041 ld de,(var_opcode_start) - 493: 7395+7 0621 1A ld a,(de) - 494: 7402+4 0622 1F rra - 495: 7406+4 0623 1F rra - 496: 7410+4 0624 1F rra - 497: 7414+7 0625 E606 and 0x06 - 498: 7421+11 0627 F5 push af + 489: - 045B param_13: + 490: 5358+11 045B E5 push hl + 491: 5369+11 045C C5 push bc + 492: 5380+20 045D ED5B1041 ld de,(var_opcode_start) + 493: 5400+7 0461 1A ld a,(de) + 494: 5407+4 0462 1F rra + 495: 5411+4 0463 1F rra + 496: 5415+4 0464 1F rra + 497: 5419+7 0465 E606 and 0x06 + 498: 5426+11 0467 F5 push af 499: ;check which table to use - 500: 7432+16 0628 2A1041 ld hl, (var_opcode_start) - 501: 7448+7 062B 7E ld a,(hl) - 502: 7455+10 062C 21B70E ld hl, [dasm_printRegisterSP_table] - 503: 7465+12 062F 18D9 jr param_11_12_all ;reuse code from 11_12 + 500: 5437+16 0468 2A1041 ld hl, (var_opcode_start) + 501: 5453+7 046B 7E ld a,(hl) + 502: 5460+10 046C 21F70C ld hl, [dasm_printRegisterSP_table] + 503: 5470+12 046F 18D9 jr param_11_12_all ;reuse code from 11_12 504: 505: - 506: - 0631 param_81: - 507: 7477+11 0631 E5 push hl - 508: 7488+11 0632 C5 push bc - 509: 7499+16 0633 2A1741 ld hl, (var_opcode_string) - 510: 7515+7 0636 0602 ld b,2 - 511: 7522+12 0638 1807 jr param_80_seek - 512: - 063A param_80: - 513: 7534+11 063A E5 push hl - 514: 7545+11 063B C5 push bc - 515: 7556+16 063C 2A1741 ld hl, (var_opcode_string) - 516: 7572+7 063F 0601 ld b,1 - 517: - 0641 param_80_seek: - 518: 7579+7 0641 7E ld a,(hl) - 519: 7586+6 0642 23 inc hl - 520: 7592+4 0643 A7 and a - 521: 7596+7+5 0644 20FB jr nz, param_80_seek + 506: - 0471 param_81: + 507: 5482+11 0471 E5 push hl + 508: 5493+11 0472 C5 push bc + 509: 5504+16 0473 2A1741 ld hl, (var_opcode_string) + 510: 5520+7 0476 0602 ld b,2 + 511: 5527+12 0478 1807 jr param_80_seek + 512: - 047A param_80: + 513: 5539+11 047A E5 push hl + 514: 5550+11 047B C5 push bc + 515: 5561+16 047C 2A1741 ld hl, (var_opcode_string) + 516: 5577+7 047F 0601 ld b,1 + 517: - 0481 param_80_seek: + 518: 5584+7 0481 7E ld a,(hl) + 519: 5591+6 0482 23 inc hl + 520: 5597+4 0483 A7 and a + 521: 5601+7+5 0484 20FB jr nz, param_80_seek 522: ;found - 523: 7603+4 0646 05 dec b ;found but counter too high - 524: 7607+10 0647 C24106 jp nz, param_80_seek + 523: 5608+4 0486 05 dec b ;found but counter too high + 524: 5612+10 0487 C28104 jp nz, param_80_seek 525: - 526: 7617+17 064A CDBF02 call print_str - 527: 7634+10 064D C1 pop bc - 528: 7644+10 064E E1 pop hl - 529: 7654+10 064F C9 ret + 526: 5622+17 048A CDDF00 call print_str + 527: 5639+10 048D C1 pop bc + 528: 5649+10 048E E1 pop hl + 529: 5659+10 048F C9 ret 530: 531: 532: - 533: - 0650 param_printRegister: - 534: 7664+11 0650 E5 push hl - 535: 7675+7 0651 FE06 cp 0x06 - 536: 7682+7+5 0653 2811 jr z, param_printRegisterHL - 537: 7689+7 0655 FE07 cp 0x07 - 538: 7696+7+5 0657 2815 jr z, param_printRegisterA - 539: 7703+10 0659 219F0E ld hl, [dasm_printRegister8_table] - 540: 7713+7 065C 0600 ld b,0 - 541: 7720+4 065E 4F ld c,a - 542: 7724+11 065F 09 add hl,bc - 543: 7735+7 0660 7E ld a, (hl) - 544: 7742+17 0661 CDB702 call print_char - 545: 7759+10 0664 E1 pop hl - 546: 7769+10 0665 C9 ret + 533: - 0490 param_printRegister: + 534: 5669+11 0490 E5 push hl + 535: 5680+7 0491 FE06 cp 0x06 + 536: 5687+7+5 0493 2811 jr z, param_printRegisterHL + 537: 5694+7 0495 FE07 cp 0x07 + 538: 5701+7+5 0497 2815 jr z, param_printRegisterA + 539: 5708+10 0499 21DF0C ld hl, [dasm_printRegister8_table] + 540: 5718+7 049C 0600 ld b,0 + 541: 5725+4 049E 4F ld c,a + 542: 5729+11 049F 09 add hl,bc + 543: 5740+7 04A0 7E ld a, (hl) + 544: 5747+17 04A1 CDD700 call print_char + 545: 5764+10 04A4 E1 pop hl + 546: 5774+10 04A5 C9 ret 547: - 548: - 0666 param_printRegisterHL: - 549: 7779+10 0666 21BF0E ld hl, [dasm_printRegister8_table_HL] - 550: 7789+17 0669 CDBF02 call print_str - 551: 7806+10 066C E1 pop hl - 552: 7816+10 066D C9 ret + 548: - 04A6 param_printRegisterHL: + 549: 5784+10 04A6 21FF0C ld hl, [dasm_printRegister8_table_HL] + 550: 5794+17 04A9 CDDF00 call print_str + 551: 5811+10 04AC E1 pop hl + 552: 5821+10 04AD C9 ret 553: - 554: - 066E param_printRegisterA: - 555: 7826+7 066E 3E41 ld a,"A" - 556: 7833+17 0670 CDB702 call print_char - 557: 7850+10 0673 E1 pop hl - 558: 7860+10 0674 C9 ret + 554: - 04AE param_printRegisterA: + 555: 5831+7 04AE 3E41 ld a,"A" + 556: 5838+17 04B0 CDD700 call print_char + 557: 5855+10 04B3 E1 pop hl + 558: 5865+10 04B4 C9 ret 559: 560: - 561: - 0675 param_comma: - 562: 7870+4 0675 78 ld a,b - 563: 7874+7 0676 FE01 cp 1 - 564: 7881+5+6 0678 C8 ret z - 565: 7886+7 0679 3E20 ld a," " - 566: 7893+17 067B CDB702 call print_char - 567: 7910+7 067E 3E2C ld a,"," - 568: 7917+17 0680 CDB702 call print_char + 561: - 04B5 param_comma: + 562: 5875+4 04B5 78 ld a,b + 563: 5879+7 04B6 FE01 cp 1 + 564: 5886+5+6 04B8 C8 ret z + 565: 5891+7 04B9 3E20 ld a," " + 566: 5898+17 04BB CDD700 call print_char + 567: 5915+7 04BE 3E2C ld a,"," + 568: 5922+17 04C0 CDD700 call print_char **** main.asm **** - 494: 7934+10 0683 C9 ret - 495: .include "disassembler_table.s" + 169: 5939+10 04C3 C9 ret + 170: .include "disassembler_table.s" **** include/disassembler_table.s **** 1: ;disassembler tables 2: - 3: - 0684 dasm_opcode_table: + 3: - 04C4 dasm_opcode_table: 4: ;byte 0 = opcode 5: ;byte 1 = opcode mask 6: ;byte 2 = opcode extended @@ -1369,697 +1067,697 @@ 25: ; 0x13 push/pop register lookup 26: ; 0x80 print string suffix 27: ; 0x81 print string suffix 2 - 28: - 0684 00FF0000 defb 0x00, 0xFF, 0x00, 0x00, 1, [dasm_00], [dasm_00]>>8,0 ;NOP - 01DC0A00 + 28: - 04C4 00FF0000 defb 0x00, 0xFF, 0x00, 0x00, 1, [dasm_00], [dasm_00]>>8,0 ;NOP + 011C0900 29: ;General-Purpose Arithmetic and CPU Control Groups - 30: - 068C 27FF0000 defb 0x27, 0xFF, 0x00, 0x00, 1, [dasm_27], [dasm_27]>>8, 0 ;DAA - 01A70B00 - 31: - 0694 2FFF0000 defb 0x2F, 0xFF, 0x00, 0x00, 1, [dasm_2F], [dasm_2F]>>8, 0 ;CPL - 01AB0B00 - 32: - 069C EDFF44FF defb 0xED, 0xFF, 0x44, 0xFF, 2, [dasm_ED_44], [dasm_ED_44]>>8, 0 ;NEG - 02AF0B00 - 33: - 06A4 3FFF0000 defb 0x3f, 0xFF, 0x00, 0x00, 1, [dasm_3F], [dasm_3F]>>8, 0 ;CCF - 01B30B00 - 34: - 06AC 37FF0000 defb 0x37, 0xFF, 0x00, 0x00, 1, [dasm_37], [dasm_37]>>8, 0 ;SCF - 01B70B00 + 30: - 04CC 27FF0000 defb 0x27, 0xFF, 0x00, 0x00, 1, [dasm_27], [dasm_27]>>8, 0 ;DAA + 01E70900 + 31: - 04D4 2FFF0000 defb 0x2F, 0xFF, 0x00, 0x00, 1, [dasm_2F], [dasm_2F]>>8, 0 ;CPL + 01EB0900 + 32: - 04DC EDFF44FF defb 0xED, 0xFF, 0x44, 0xFF, 2, [dasm_ED_44], [dasm_ED_44]>>8, 0 ;NEG + 02EF0900 + 33: - 04E4 3FFF0000 defb 0x3f, 0xFF, 0x00, 0x00, 1, [dasm_3F], [dasm_3F]>>8, 0 ;CCF + 01F30900 + 34: - 04EC 37FF0000 defb 0x37, 0xFF, 0x00, 0x00, 1, [dasm_37], [dasm_37]>>8, 0 ;SCF + 01F70900 35: ;defb 0x00, 0xFF, 0x00, 0x00, 1, [dasm_00], [dasm_00]>>8,0 ;NOP -> already at top for performance reasons - 36: - 06B4 76FF0000 defb 0x76, 0xFF, 0x00, 0x00, 1, [dasm_76], [dasm_76]>>8, 0 ;HALT - 01BB0B00 - 37: - 06BC F3FF0000 defb 0xF3, 0xFF, 0x00, 0x00, 1, [dasm_F3], [dasm_F3]>>8, 0 ;DI - 01C00B00 - 38: - 06C4 FBFF0000 defb 0xFB, 0xFF, 0x00, 0x00, 1, [dasm_FB], [dasm_FB]>>8, 0 ;EI - 01C30B00 - 39: - 06CC EDFF46FF defb 0xED, 0xFF, 0x46, 0xFF, 2, [dasm_ED_46], [dasm_ED_46]>>8, 0 ;IM 0 - 02C60B00 - 40: - 06D4 EDFF56FF defb 0xED, 0xFF, 0x56, 0xFF, 2, [dasm_ED_56], [dasm_ED_56]>>8, 0 ;IM 1 - 02CB0B00 - 41: - 06DC EDFF5EFF defb 0xED, 0xFF, 0x5E, 0xFF, 2, [dasm_ED_5E], [dasm_ED_5E]>>8, 0 ;IM 2 - 02D00B00 + 36: - 04F4 76FF0000 defb 0x76, 0xFF, 0x00, 0x00, 1, [dasm_76], [dasm_76]>>8, 0 ;HALT + 01FB0900 + 37: - 04FC F3FF0000 defb 0xF3, 0xFF, 0x00, 0x00, 1, [dasm_F3], [dasm_F3]>>8, 0 ;DI + 01000A00 + 38: - 0504 FBFF0000 defb 0xFB, 0xFF, 0x00, 0x00, 1, [dasm_FB], [dasm_FB]>>8, 0 ;EI + 01030A00 + 39: - 050C EDFF46FF defb 0xED, 0xFF, 0x46, 0xFF, 2, [dasm_ED_46], [dasm_ED_46]>>8, 0 ;IM 0 + 02060A00 + 40: - 0514 EDFF56FF defb 0xED, 0xFF, 0x56, 0xFF, 2, [dasm_ED_56], [dasm_ED_56]>>8, 0 ;IM 1 + 020B0A00 + 41: - 051C EDFF5EFF defb 0xED, 0xFF, 0x5E, 0xFF, 2, [dasm_ED_5E], [dasm_ED_5E]>>8, 0 ;IM 2 + 02100A00 42: 43: ;Exchange, Block Transfer, and Search Group - 44: - 06E4 EBFF0000 defb 0xEB, 0xFF, 0x00, 0x00, 1, [dasm_BE], [dasm_BE]>>8, 0 ;EX DE, HL - 01D50B00 - 45: - 06EC 08FF0000 defb 0x08, 0xFF, 0x00, 0x00, 1, [dasm_08], [dasm_08]>>8, 0 ;EX AF, AF′ - 01DF0B00 - 46: - 06F4 D9FF0000 defb 0xD9, 0xFF, 0x00, 0x00, 1, [dasm_D9], [dasm_D9]>>8, 0 ;EXX - 01EC0B00 - 47: - 06FC E3FF0000 defb 0xE3, 0xFF, 0x00, 0x00, 1, [dasm_E3], [dasm_E3]>>8, 0 ;EX (SP), HL - 01F00B00 - 48: - 0704 DDFFE3FF defb 0xDD, 0xFF, 0xE3, 0xFF, 2, [dasm_DD_E3], [dasm_DD_E3]>>8, 0 ;EX (SP), IX - 02FC0B00 - 49: - 070C FDFFE3FF defb 0xFD, 0xFF, 0xE3, 0xFF, 2, [dasm_FD_E3], [dasm_FD_E3]>>8, 0 ;EX (SP), IY - 02080C00 - 50: - 0714 EDFFA0FF defb 0xED, 0xFF, 0xA0, 0xFF, 2, [dasm_ED_A0], [dasm_ED_A0]>>8, 0 ;LDI - 02140C00 - 51: - 071C EDFFB0FF defb 0xED, 0xFF, 0xB0, 0xFF, 2, [dasm_ED_B0], [dasm_ED_B0]>>8, 0 ;LDIR - 02180C00 - 52: - 0724 EDFFA8FF defb 0xED, 0xFF, 0xA8, 0xFF, 2, [dasm_ED_A8], [dasm_ED_A8]>>8, 0 ;LDD - 021D0C00 - 53: - 072C EDFFB8FF defb 0xED, 0xFF, 0xB8, 0xFF, 2, [dasm_ED_B8], [dasm_ED_B8]>>8, 0 ;LDDR - 02210C00 - 54: - 0734 EDFFA1FF defb 0xED, 0xFF, 0xA1, 0xFF, 2, [dasm_ED_A1], [dasm_ED_A1]>>8, 0 ;CPI - 02260C00 - 55: - 073C EDFFB1FF defb 0xED, 0xFF, 0xB1, 0xFF, 2, [dasm_ED_B1], [dasm_ED_B1]>>8, 0 ;CPIR - 022A0C00 - 56: - 0744 EDFFA9FF defb 0xED, 0xFF, 0xA9, 0xFF, 2, [dasm_ED_A9], [dasm_ED_A9]>>8, 0 ;CPD - 022F0C00 - 57: - 074C EDFFB9FF defb 0xED, 0xFF, 0xB9, 0xFF, 2, [dasm_ED_B9], [dasm_ED_B9]>>8, 0 ;CPDR - 02330C00 + 44: - 0524 EBFF0000 defb 0xEB, 0xFF, 0x00, 0x00, 1, [dasm_BE], [dasm_BE]>>8, 0 ;EX DE, HL + 01150A00 + 45: - 052C 08FF0000 defb 0x08, 0xFF, 0x00, 0x00, 1, [dasm_08], [dasm_08]>>8, 0 ;EX AF, AF′ + 011F0A00 + 46: - 0534 D9FF0000 defb 0xD9, 0xFF, 0x00, 0x00, 1, [dasm_D9], [dasm_D9]>>8, 0 ;EXX + 012C0A00 + 47: - 053C E3FF0000 defb 0xE3, 0xFF, 0x00, 0x00, 1, [dasm_E3], [dasm_E3]>>8, 0 ;EX (SP), HL + 01300A00 + 48: - 0544 DDFFE3FF defb 0xDD, 0xFF, 0xE3, 0xFF, 2, [dasm_DD_E3], [dasm_DD_E3]>>8, 0 ;EX (SP), IX + 023C0A00 + 49: - 054C FDFFE3FF defb 0xFD, 0xFF, 0xE3, 0xFF, 2, [dasm_FD_E3], [dasm_FD_E3]>>8, 0 ;EX (SP), IY + 02480A00 + 50: - 0554 EDFFA0FF defb 0xED, 0xFF, 0xA0, 0xFF, 2, [dasm_ED_A0], [dasm_ED_A0]>>8, 0 ;LDI + 02540A00 + 51: - 055C EDFFB0FF defb 0xED, 0xFF, 0xB0, 0xFF, 2, [dasm_ED_B0], [dasm_ED_B0]>>8, 0 ;LDIR + 02580A00 + 52: - 0564 EDFFA8FF defb 0xED, 0xFF, 0xA8, 0xFF, 2, [dasm_ED_A8], [dasm_ED_A8]>>8, 0 ;LDD + 025D0A00 + 53: - 056C EDFFB8FF defb 0xED, 0xFF, 0xB8, 0xFF, 2, [dasm_ED_B8], [dasm_ED_B8]>>8, 0 ;LDDR + 02610A00 + 54: - 0574 EDFFA1FF defb 0xED, 0xFF, 0xA1, 0xFF, 2, [dasm_ED_A1], [dasm_ED_A1]>>8, 0 ;CPI + 02660A00 + 55: - 057C EDFFB1FF defb 0xED, 0xFF, 0xB1, 0xFF, 2, [dasm_ED_B1], [dasm_ED_B1]>>8, 0 ;CPIR + 026A0A00 + 56: - 0584 EDFFA9FF defb 0xED, 0xFF, 0xA9, 0xFF, 2, [dasm_ED_A9], [dasm_ED_A9]>>8, 0 ;CPD + 026F0A00 + 57: - 058C EDFFB9FF defb 0xED, 0xFF, 0xB9, 0xFF, 2, [dasm_ED_B9], [dasm_ED_B9]>>8, 0 ;CPDR + 02730A00 58: 59: ;JUMP Group - 60: - 0754 C3FF0000 defb 0xC3, 0xFF, 0x00, 0x00, 3, [dasm_C3], [dasm_C3]>>8,1, 0x01 ;JP nn - 03E00A01 + 60: - 0594 C3FF0000 defb 0xC3, 0xFF, 0x00, 0x00, 3, [dasm_C3], [dasm_C3]>>8,1, 0x01 ;JP nn + 03200901 01 - 61: - 075D C2C70000 defb 0xC2, 0xC7, 0x00, 0x00, 3, [dasm_C3], [dasm_C3]>>8,3, 0x02, 0x80, 0x01 ;JP cc,nn - 03E00A03 + 61: - 059D C2C70000 defb 0xC2, 0xC7, 0x00, 0x00, 3, [dasm_C3], [dasm_C3]>>8,3, 0x02, 0x80, 0x01 ;JP cc,nn + 03200903 028001 - 62: - 0768 18FF0000 defb 0x18, 0xFF, 0x00, 0x00, 2, [dasm_18], [dasm_18]>>8,1, 0x03 ;JR e - 02E70A01 + 62: - 05A8 18FF0000 defb 0x18, 0xFF, 0x00, 0x00, 2, [dasm_18], [dasm_18]>>8,1, 0x03 ;JR e + 02270901 03 - 63: - 0771 38FF0000 defb 0x38, 0xFF, 0x00, 0x00, 2, [dasm_38], [dasm_38]>>8,1, 0x03 ;JR C,e - 02EB0A01 + 63: - 05B1 38FF0000 defb 0x38, 0xFF, 0x00, 0x00, 2, [dasm_38], [dasm_38]>>8,1, 0x03 ;JR C,e + 022B0901 03 - 64: - 077A 30FF0000 defb 0x30, 0xFF, 0x00, 0x00, 2, [dasm_30], [dasm_30]>>8,1, 0x03 ;JR NC,e - 02F20A01 + 64: - 05BA 30FF0000 defb 0x30, 0xFF, 0x00, 0x00, 2, [dasm_30], [dasm_30]>>8,1, 0x03 ;JR NC,e + 02320901 03 - 65: - 0783 28FF0000 defb 0x28, 0xFF, 0x00, 0x00, 2, [dasm_28], [dasm_28]>>8,1, 0x03 ;JR Z,e - 02FA0A01 + 65: - 05C3 28FF0000 defb 0x28, 0xFF, 0x00, 0x00, 2, [dasm_28], [dasm_28]>>8,1, 0x03 ;JR Z,e + 023A0901 03 - 66: - 078C 20FF0000 defb 0x20, 0xFF, 0x00, 0x00, 2, [dasm_20], [dasm_20]>>8,1, 0x03 ;JR NZ,e - 02010B01 + 66: - 05CC 20FF0000 defb 0x20, 0xFF, 0x00, 0x00, 2, [dasm_20], [dasm_20]>>8,1, 0x03 ;JR NZ,e + 02410901 03 - 67: - 0795 E9FF0000 defb 0xE9, 0xFF, 0x00, 0x00, 2, [dasm_E9], [dasm_E9]>>8,0 ;JP (HL) - 02090B00 - 68: - 079D DDFFE9FF defb 0xDD, 0xFF, 0xE9, 0xFF, 2, [dasm_DD], [dasm_DD]>>8,0 ;JP (IX) - 02120B00 - 69: - 07A5 FDFFE9FF defb 0xFD, 0xFF, 0xE9, 0xFF, 2, [dasm_FD], [dasm_FD]>>8,0 ;JP (IY) - 021B0B00 - 70: - 07AD 10FF0000 defb 0x10, 0xFF, 0x00, 0x00, 2, [dasm_10], [dasm_10]>>8,1, 0x03 ;DJNZ, e - 02240B01 + 67: - 05D5 E9FF0000 defb 0xE9, 0xFF, 0x00, 0x00, 2, [dasm_E9], [dasm_E9]>>8,0 ;JP (HL) + 02490900 + 68: - 05DD DDFFE9FF defb 0xDD, 0xFF, 0xE9, 0xFF, 2, [dasm_DD], [dasm_DD]>>8,0 ;JP (IX) + 02520900 + 69: - 05E5 FDFFE9FF defb 0xFD, 0xFF, 0xE9, 0xFF, 2, [dasm_FD], [dasm_FD]>>8,0 ;JP (IY) + 025B0900 + 70: - 05ED 10FF0000 defb 0x10, 0xFF, 0x00, 0x00, 2, [dasm_10], [dasm_10]>>8,1, 0x03 ;DJNZ, e + 02640901 03 71: ;Call and Return Group - 72: - 07B6 CDFF0000 defb 0xCD, 0xFF, 0x00, 0x00, 3, [dasm_CD], [dasm_CD]>>8,1, 0x01 ;CALL nn - 032A0B01 + 72: - 05F6 CDFF0000 defb 0xCD, 0xFF, 0x00, 0x00, 3, [dasm_CD], [dasm_CD]>>8,1, 0x01 ;CALL nn + 036A0901 01 - 73: - 07BF C4C70000 defb 0xC4, 0xC7, 0x00, 0x00, 3, [dasm_CD], [dasm_CD]>>8,2, 0x02, 0x01 ;CALL cc,nn - 032A0B02 + 73: - 05FF C4C70000 defb 0xC4, 0xC7, 0x00, 0x00, 3, [dasm_CD], [dasm_CD]>>8,2, 0x02, 0x01 ;CALL cc,nn + 036A0902 0201 - 74: - 07C9 C9FF0000 defb 0xC9, 0xFF, 0x00, 0x00, 1, [dasm_C9], [dasm_C9]>>8,0 ;RET - 01300B00 - 75: - 07D1 C0C70000 defb 0xC0, 0xC7, 0x00, 0x00, 1, [dasm_C9], [dasm_C9]>>8,1, 0x02 ;RET cc - 01300B01 + 74: - 0609 C9FF0000 defb 0xC9, 0xFF, 0x00, 0x00, 1, [dasm_C9], [dasm_C9]>>8,0 ;RET + 01700900 + 75: - 0611 C0C70000 defb 0xC0, 0xC7, 0x00, 0x00, 1, [dasm_C9], [dasm_C9]>>8,1, 0x02 ;RET cc + 01700901 02 - 76: - 07DA EDFF4DFF defb 0xED, 0xFF, 0x4D, 0xFF, 2, [dasm_ED_4D], [dasm_ED_4D]>>8,0 ;RETI - 02350B00 - 77: - 07E2 EDFF45FF defb 0xED, 0xFF, 0x45, 0xFF, 2, [dasm_ED_45], [dasm_ED_45]>>8,0 ;RETN - 023A0B00 + 76: - 061A EDFF4DFF defb 0xED, 0xFF, 0x4D, 0xFF, 2, [dasm_ED_4D], [dasm_ED_4D]>>8,0 ;RETI + 02750900 + 77: - 0622 EDFF45FF defb 0xED, 0xFF, 0x45, 0xFF, 2, [dasm_ED_45], [dasm_ED_45]>>8,0 ;RETN + 027A0900 78: - 79: - 07EA C7C70000 defb 0xC7, 0xC7, 0x00, 0x00, 1, [dasm_FF], [dasm_FF]>>8,1, 0x05 ;RST - 013F0B01 + 79: - 062A C7C70000 defb 0xC7, 0xC7, 0x00, 0x00, 1, [dasm_FF], [dasm_FF]>>8,1, 0x05 ;RST + 017F0901 05 80: ;8-Bit load group - 81: - 07F3 0AFF0000 defb 0x0A, 0xFF, 0x00, 0x00, 1, [dasm_0A], [dasm_0A]>>8, 0 ;LD A, (BC) - 01440B00 - 82: - 07FB 1AFF0000 defb 0x1A, 0xFF, 0x00, 0x00, 1, [dasm_1A], [dasm_1A]>>8, 0 ;LD A, (DE) - 014E0B00 - 83: - 0803 3AFF0000 defb 0x3A, 0xFF, 0x00, 0x00, 3, [dasm_3A], [dasm_3A]>>8, 2, 0x09, 0x80 ;LD A, (nn) - 03580B02 + 81: - 0633 0AFF0000 defb 0x0A, 0xFF, 0x00, 0x00, 1, [dasm_0A], [dasm_0A]>>8, 0 ;LD A, (BC) + 01840900 + 82: - 063B 1AFF0000 defb 0x1A, 0xFF, 0x00, 0x00, 1, [dasm_1A], [dasm_1A]>>8, 0 ;LD A, (DE) + 018E0900 + 83: - 0643 3AFF0000 defb 0x3A, 0xFF, 0x00, 0x00, 3, [dasm_3A], [dasm_3A]>>8, 2, 0x09, 0x80 ;LD A, (nn) + 03980902 0980 - 84: - 080D 02FF0000 defb 0x02, 0xFF, 0x00, 0x00, 1, [dasm_02], [dasm_02]>>8, 0 ;LD (BC), A - 01620B00 - 85: - 0815 12FF0000 defb 0x12, 0xFF, 0x00, 0x00, 1, [dasm_12], [dasm_12]>>8, 0 ;LD (DE), A - 016D0B00 - 86: - 081D 32FF0000 defb 0x32, 0xFF, 0x00, 0x00, 3, [dasm_32], [dasm_32]>>8, 2, 0x09, 0x80 ;LD (nn), A - 03780B02 + 84: - 064D 02FF0000 defb 0x02, 0xFF, 0x00, 0x00, 1, [dasm_02], [dasm_02]>>8, 0 ;LD (BC), A + 01A20900 + 85: - 0655 12FF0000 defb 0x12, 0xFF, 0x00, 0x00, 1, [dasm_12], [dasm_12]>>8, 0 ;LD (DE), A + 01AD0900 + 86: - 065D 32FF0000 defb 0x32, 0xFF, 0x00, 0x00, 3, [dasm_32], [dasm_32]>>8, 2, 0x09, 0x80 ;LD (nn), A + 03B80902 0980 - 87: - 0827 EDFF57FF defb 0xED, 0xFF, 0x57, 0xFF, 2, [dasm__ED_57], [dasm__ED_57]>>8, 0 ;LD A, I - 02870B00 - 88: - 082F EDFF5FFF defb 0xED, 0xFF, 0x5F, 0xFF, 2, [dasm__ED_5F], [dasm__ED_5F]>>8, 0 ;LD A, R - 028F0B00 - 89: - 0837 EDFF47FF defb 0xED, 0xFF, 0x47, 0xFF, 2, [dasm__ED_47], [dasm__ED_47]>>8, 0 ;LD I, A - 02970B00 - 90: - 083F EDFF4FFF defb 0xED, 0xFF, 0x4F, 0xFF, 2, [dasm__ED_4F], [dasm__ED_4F]>>8, 0 ;LD R, A - 029F0B00 + 87: - 0667 EDFF57FF defb 0xED, 0xFF, 0x57, 0xFF, 2, [dasm__ED_57], [dasm__ED_57]>>8, 0 ;LD A, I + 02C70900 + 88: - 066F EDFF5FFF defb 0xED, 0xFF, 0x5F, 0xFF, 2, [dasm__ED_5F], [dasm__ED_5F]>>8, 0 ;LD A, R + 02CF0900 + 89: - 0677 EDFF47FF defb 0xED, 0xFF, 0x47, 0xFF, 2, [dasm__ED_47], [dasm__ED_47]>>8, 0 ;LD I, A + 02D70900 + 90: - 067F EDFF4FFF defb 0xED, 0xFF, 0x4F, 0xFF, 2, [dasm__ED_4F], [dasm__ED_4F]>>8, 0 ;LD R, A + 02DF0900 91: - 92: - 0847 06C70000 defb 0x06, 0xC7, 0x00, 0x00, 2, [dasm__LD], [dasm__LD]>>8, 2, 0x06, 0x08 ;LD r, n - 02830B02 + 92: - 0687 06C70000 defb 0x06, 0xC7, 0x00, 0x00, 2, [dasm__LD], [dasm__LD]>>8, 2, 0x06, 0x08 ;LD r, n + 02C30902 0608 - 93: - 0851 40C00000 defb 0x40, 0xC0, 0x00, 0x00, 1, [dasm__LD], [dasm__LD]>>8, 2, 0x06, 0x07 ;LD r, r' / LD r, (HL) / LD (HL), r - 01830B02 + 93: - 0691 40C00000 defb 0x40, 0xC0, 0x00, 0x00, 1, [dasm__LD], [dasm__LD]>>8, 2, 0x06, 0x07 ;LD r, r' / LD r, (HL) / LD (HL), r + 01C30902 0607 94: 95: ;8-Bit Arithmetic Group - 96: - 085B 80F80000 defb 0x80, 0xF8, 0x00, 0x00, 1, [dasm_80C6], [dasm_80C6]>>8, 1, 0x07 ;ADD A, r / ADD A, (HL) - 01380C01 + 96: - 069B 80F80000 defb 0x80, 0xF8, 0x00, 0x00, 1, [dasm_80C6], [dasm_80C6]>>8, 1, 0x07 ;ADD A, r / ADD A, (HL) + 01780A01 07 - 97: - 0864 C6FF0000 defb 0xC6, 0xFF, 0x00, 0x00, 2, [dasm_80C6], [dasm_80C6]>>8, 1, 0x08 ;ADD A, n - 02380C01 + 97: - 06A4 C6FF0000 defb 0xC6, 0xFF, 0x00, 0x00, 2, [dasm_80C6], [dasm_80C6]>>8, 1, 0x08 ;ADD A, n + 02780A01 08 - 98: - 086D DDFF86FF defb 0xDD, 0xFF, 0x86, 0xFF, 3, [dasm_DD_86], [dasm_DD_86]>>8, 2, 0x08, 0x80 ;ADD A, (IX + d) - 03400C02 + 98: - 06AD DDFF86FF defb 0xDD, 0xFF, 0x86, 0xFF, 3, [dasm_DD_86], [dasm_DD_86]>>8, 2, 0x08, 0x80 ;ADD A, (IX + d) + 03800A02 0880 - 99: - 0877 FDFF86FF defb 0xFD, 0xFF, 0x86, 0xFF, 3, [dasm_FD_86], [dasm_FD_86]>>8, 2, 0x08, 0x80 ;ADD A, (IY + d) - 034F0C02 + 99: - 06B7 FDFF86FF defb 0xFD, 0xFF, 0x86, 0xFF, 3, [dasm_FD_86], [dasm_FD_86]>>8, 2, 0x08, 0x80 ;ADD A, (IY + d) + 038F0A02 0880 - 100: - 0881 C8F80000 defb 0xC8, 0xF8, 0x00, 0x00, 1, [dasm_C88E], [dasm_C88E]>>8, 1, 0x07 ;ADC A, r / ADC A, (HL) - 015E0C01 + 100: - 06C1 C8F80000 defb 0xC8, 0xF8, 0x00, 0x00, 1, [dasm_C88E], [dasm_C88E]>>8, 1, 0x07 ;ADC A, r / ADC A, (HL) + 019E0A01 07 - 101: - 088A 8EF80000 defb 0x8E, 0xF8, 0x00, 0x00, 2, [dasm_C88E], [dasm_C88E]>>8, 1, 0x08 ;ADC A, n - 025E0C01 + 101: - 06CA 8EF80000 defb 0x8E, 0xF8, 0x00, 0x00, 2, [dasm_C88E], [dasm_C88E]>>8, 1, 0x08 ;ADC A, n + 029E0A01 08 - 102: - 0893 DDFF8EFF defb 0xDD, 0xFF, 0x8E, 0xFF, 3, [dasm_DD_8E], [dasm_DD_8E]>>8, 2, 0x08, 0x80 ;ADC A, (IX + d) - 03660C02 + 102: - 06D3 DDFF8EFF defb 0xDD, 0xFF, 0x8E, 0xFF, 3, [dasm_DD_8E], [dasm_DD_8E]>>8, 2, 0x08, 0x80 ;ADC A, (IX + d) + 03A60A02 0880 - 103: - 089D FDFF8EFF defb 0xFD, 0xFF, 0x8E, 0xFF, 3, [dasm_FD_8E], [dasm_FD_8E]>>8, 2, 0x08, 0x80 ;ADC A, (IY + d) - 03750C02 + 103: - 06DD FDFF8EFF defb 0xFD, 0xFF, 0x8E, 0xFF, 3, [dasm_FD_8E], [dasm_FD_8E]>>8, 2, 0x08, 0x80 ;ADC A, (IY + d) + 03B50A02 0880 - 104: - 08A7 90F80000 defb 0x90, 0xF8, 0x00, 0x00, 1, [dasm__SUB], [dasm__SUB]>>8, 1, 0x07 ;SUB r / SUB A, (HL) - 01840C01 + 104: - 06E7 90F80000 defb 0x90, 0xF8, 0x00, 0x00, 1, [dasm__SUB], [dasm__SUB]>>8, 1, 0x07 ;SUB r / SUB A, (HL) + 01C40A01 07 - 105: - 08B0 D6FF0000 defb 0xD6, 0xFF, 0x00, 0x00, 2, [dasm__SUB], [dasm__SUB]>>8, 1, 0x08 ;SUB n - 02840C01 + 105: - 06F0 D6FF0000 defb 0xD6, 0xFF, 0x00, 0x00, 2, [dasm__SUB], [dasm__SUB]>>8, 1, 0x08 ;SUB n + 02C40A01 08 - 106: - 08B9 DDFF96FF defb 0xDD, 0xFF, 0x96, 0xFF, 3, [dasm_DD_96], [dasm_DD_96]>>8, 2, 0x08, 0x80 ;SUB (IX + d) - 03890C02 + 106: - 06F9 DDFF96FF defb 0xDD, 0xFF, 0x96, 0xFF, 3, [dasm_DD_96], [dasm_DD_96]>>8, 2, 0x08, 0x80 ;SUB (IX + d) + 03C90A02 0880 - 107: - 08C3 FDFF96FF defb 0xFD, 0xFF, 0x96, 0xFF, 3, [dasm_FD_96], [dasm_FD_96]>>8, 2, 0x08, 0x80 ;SUB (IY + d) - 03950C02 + 107: - 0703 FDFF96FF defb 0xFD, 0xFF, 0x96, 0xFF, 3, [dasm_FD_96], [dasm_FD_96]>>8, 2, 0x08, 0x80 ;SUB (IY + d) + 03D50A02 0880 - 108: - 08CD 94F80000 defb 0x94, 0xF8, 0x00, 0x00, 1, [dasm__SBC], [dasm__SBC]>>8, 1, 0x07 ;SBC A,r / SBC A, (HL) - 01A10C01 + 108: - 070D 94F80000 defb 0x94, 0xF8, 0x00, 0x00, 1, [dasm__SBC], [dasm__SBC]>>8, 1, 0x07 ;SBC A,r / SBC A, (HL) + 01E10A01 07 - 109: - 08D6 DEFF0000 defb 0xDE, 0xFF, 0x00, 0x00, 2, [dasm__SBC], [dasm__SBC]>>8, 1, 0x08 ;SBC A,n - 02A10C01 + 109: - 0716 DEFF0000 defb 0xDE, 0xFF, 0x00, 0x00, 2, [dasm__SBC], [dasm__SBC]>>8, 1, 0x08 ;SBC A,n + 02E10A01 08 - 110: - 08DF DDFF9EFF defb 0xDD, 0xFF, 0x9E, 0xFF, 3, [dasm_DD_9E], [dasm_DD_9E]>>8, 2, 0x08, 0x80 ;SBC A,(IX + d) - 03A90C02 + 110: - 071F DDFF9EFF defb 0xDD, 0xFF, 0x9E, 0xFF, 3, [dasm_DD_9E], [dasm_DD_9E]>>8, 2, 0x08, 0x80 ;SBC A,(IX + d) + 03E90A02 0880 - 111: - 08E9 FDFF9EFF defb 0xFD, 0xFF, 0x9E, 0xFF, 3, [dasm_FD_9E], [dasm_FD_9E]>>8, 2, 0x08, 0x80 ;SBC A,(IY + d) - 03B70C02 + 111: - 0729 FDFF9EFF defb 0xFD, 0xFF, 0x9E, 0xFF, 3, [dasm_FD_9E], [dasm_FD_9E]>>8, 2, 0x08, 0x80 ;SBC A,(IY + d) + 03F70A02 0880 - 112: - 08F3 A0F80000 defb 0xA0, 0xF8, 0x00, 0x00, 1, [dasm__AND], [dasm__AND]>>8, 1, 0x07 ;AND A,r / AND A, (HL) - 01C50C01 + 112: - 0733 A0F80000 defb 0xA0, 0xF8, 0x00, 0x00, 1, [dasm__AND], [dasm__AND]>>8, 1, 0x07 ;AND A,r / AND A, (HL) + 01050B01 07 - 113: - 08FC E6FF0000 defb 0xE6, 0xFF, 0x00, 0x00, 2, [dasm__AND], [dasm__AND]>>8, 1, 0x08 ;AND A,n - 02C50C01 + 113: - 073C E6FF0000 defb 0xE6, 0xFF, 0x00, 0x00, 2, [dasm__AND], [dasm__AND]>>8, 1, 0x08 ;AND A,n + 02050B01 08 - 114: - 0905 DDFFA6FF defb 0xDD, 0xFF, 0xA6, 0xFF, 3, [dasm_DD_A6], [dasm_DD_A6]>>8, 2, 0x08, 0x80 ;AND A,(IX + d) - 03CA0C02 + 114: - 0745 DDFFA6FF defb 0xDD, 0xFF, 0xA6, 0xFF, 3, [dasm_DD_A6], [dasm_DD_A6]>>8, 2, 0x08, 0x80 ;AND A,(IX + d) + 030A0B02 0880 - 115: - 090F FDFFA6FF defb 0xFD, 0xFF, 0xA6, 0xFF, 3, [dasm_FD_A6], [dasm_FD_A6]>>8, 2, 0x08, 0x80 ;AND A,(IY + d) - 03D60C02 + 115: - 074F FDFFA6FF defb 0xFD, 0xFF, 0xA6, 0xFF, 3, [dasm_FD_A6], [dasm_FD_A6]>>8, 2, 0x08, 0x80 ;AND A,(IY + d) + 03160B02 0880 - 116: - 0919 B0F80000 defb 0xB0, 0xF8, 0x00, 0x00, 1, [dasm__OR], [dasm__OR]>>8, 1, 0x07 ;OR A,r / OR A, (HL) - 01E20C01 + 116: - 0759 B0F80000 defb 0xB0, 0xF8, 0x00, 0x00, 1, [dasm__OR], [dasm__OR]>>8, 1, 0x07 ;OR A,r / OR A, (HL) + 01220B01 07 - 117: - 0922 F6FF0000 defb 0xF6, 0xFF, 0x00, 0x00, 2, [dasm__OR], [dasm__OR]>>8, 1, 0x08 ;OR A,n - 02E20C01 + 117: - 0762 F6FF0000 defb 0xF6, 0xFF, 0x00, 0x00, 2, [dasm__OR], [dasm__OR]>>8, 1, 0x08 ;OR A,n + 02220B01 08 - 118: - 092B DDFFB6FF defb 0xDD, 0xFF, 0xB6, 0xFF, 3, [dasm_DD_B6], [dasm_DD_B6]>>8, 2, 0x08, 0x80 ;OR A,(IX + d) - 03E60C02 + 118: - 076B DDFFB6FF defb 0xDD, 0xFF, 0xB6, 0xFF, 3, [dasm_DD_B6], [dasm_DD_B6]>>8, 2, 0x08, 0x80 ;OR A,(IX + d) + 03260B02 0880 - 119: - 0935 FDFFB6FF defb 0xFD, 0xFF, 0xB6, 0xFF, 3, [dasm_FD_B6], [dasm_FD_B6]>>8, 2, 0x08, 0x80 ;OR A,(IY + d) - 03F10C02 + 119: - 0775 FDFFB6FF defb 0xFD, 0xFF, 0xB6, 0xFF, 3, [dasm_FD_B6], [dasm_FD_B6]>>8, 2, 0x08, 0x80 ;OR A,(IY + d) + 03310B02 0880 - 120: - 093F A8F80000 defb 0xA8, 0xF8, 0x00, 0x00, 1, [dasm__XOR], [dasm__XOR]>>8, 1, 0x07 ;XOR A,r / XOR A, (HL) - 01FC0C01 + 120: - 077F A8F80000 defb 0xA8, 0xF8, 0x00, 0x00, 1, [dasm__XOR], [dasm__XOR]>>8, 1, 0x07 ;XOR A,r / XOR A, (HL) + 013C0B01 07 - 121: - 0948 EEFF0000 defb 0xEE, 0xFF, 0x00, 0x00, 2, [dasm__XOR], [dasm__XOR]>>8, 1, 0x08 ;XOR A,n - 02FC0C01 + 121: - 0788 EEFF0000 defb 0xEE, 0xFF, 0x00, 0x00, 2, [dasm__XOR], [dasm__XOR]>>8, 1, 0x08 ;XOR A,n + 023C0B01 08 - 122: - 0951 DDFFAEFF defb 0xDD, 0xFF, 0xAE, 0xFF, 3, [dasm_DD_AE], [dasm_DD_AE]>>8, 2, 0x08, 0x80 ;XOR A,(IX + d) - 03010D02 + 122: - 0791 DDFFAEFF defb 0xDD, 0xFF, 0xAE, 0xFF, 3, [dasm_DD_AE], [dasm_DD_AE]>>8, 2, 0x08, 0x80 ;XOR A,(IX + d) + 03410B02 0880 - 123: - 095B FDFFAEFF defb 0xFD, 0xFF, 0xAE, 0xFF, 3, [dasm_FD_AE], [dasm_FD_AE]>>8, 2, 0x08, 0x80 ;XOR A,(IY + d) - 030D0D02 + 123: - 079B FDFFAEFF defb 0xFD, 0xFF, 0xAE, 0xFF, 3, [dasm_FD_AE], [dasm_FD_AE]>>8, 2, 0x08, 0x80 ;XOR A,(IY + d) + 034D0B02 0880 - 124: - 0965 B8F80000 defb 0xB8, 0xF8, 0x00, 0x00, 1, [dasm__CP], [dasm__CP]>>8, 1, 0x07 ;CP A,r / CP A, (HL) - 01190D01 + 124: - 07A5 B8F80000 defb 0xB8, 0xF8, 0x00, 0x00, 1, [dasm__CP], [dasm__CP]>>8, 1, 0x07 ;CP A,r / CP A, (HL) + 01590B01 07 - 125: - 096E FEFF0000 defb 0xFE, 0xFF, 0x00, 0x00, 2, [dasm__CP], [dasm__CP]>>8, 1, 0x08 ;CP A,n - 02190D01 + 125: - 07AE FEFF0000 defb 0xFE, 0xFF, 0x00, 0x00, 2, [dasm__CP], [dasm__CP]>>8, 1, 0x08 ;CP A,n + 02590B01 08 - 126: - 0977 DDFFBEFF defb 0xDD, 0xFF, 0xBE, 0xFF, 3, [dasm_DD_BE], [dasm_DD_BE]>>8, 2, 0x08, 0x80 ;CP A,(IX + d) - 031D0D02 + 126: - 07B7 DDFFBEFF defb 0xDD, 0xFF, 0xBE, 0xFF, 3, [dasm_DD_BE], [dasm_DD_BE]>>8, 2, 0x08, 0x80 ;CP A,(IX + d) + 035D0B02 0880 - 127: - 0981 FDFFBEFF defb 0xFD, 0xFF, 0xBE, 0xFF, 3, [dasm_FD_BE], [dasm_FD_BE]>>8, 2, 0x08, 0x80 ;CP A,(IY + d) - 03280D02 + 127: - 07C1 FDFFBEFF defb 0xFD, 0xFF, 0xBE, 0xFF, 3, [dasm_FD_BE], [dasm_FD_BE]>>8, 2, 0x08, 0x80 ;CP A,(IY + d) + 03680B02 0880 - 128: - 098B 04C70000 defb 0x04, 0xC7, 0x00, 0x00, 1, [dasm__INC], [dasm__INC]>>8, 1, 0x10 ;INC r / INC (HL) - 01330D01 + 128: - 07CB 04C70000 defb 0x04, 0xC7, 0x00, 0x00, 1, [dasm__INC], [dasm__INC]>>8, 1, 0x10 ;INC r / INC (HL) + 01730B01 10 - 129: - 0994 DDFF34FF defb 0xDD, 0xFF, 0x34, 0xFF, 3, [dasm_DD_34], [dasm_DD_34]>>8, 2, 0x08, 0x80 ;INC (IX + d) - 03380D02 + 129: - 07D4 DDFF34FF defb 0xDD, 0xFF, 0x34, 0xFF, 3, [dasm_DD_34], [dasm_DD_34]>>8, 2, 0x08, 0x80 ;INC (IX + d) + 03780B02 0880 - 130: - 099E FDFF34FF defb 0xFD, 0xFF, 0x34, 0xFF, 3, [dasm_FD_34], [dasm_FD_34]>>8, 2, 0x08, 0x80 ;INC (IY + d) - 03440D02 + 130: - 07DE FDFF34FF defb 0xFD, 0xFF, 0x34, 0xFF, 3, [dasm_FD_34], [dasm_FD_34]>>8, 2, 0x08, 0x80 ;INC (IY + d) + 03840B02 0880 - 131: - 09A8 05C70000 defb 0x05, 0xC7, 0x00, 0x00, 1, [dasm__DEC], [dasm__DEC]>>8, 1, 0x10 ;DEC r / DEC (HL) - 01500D01 + 131: - 07E8 05C70000 defb 0x05, 0xC7, 0x00, 0x00, 1, [dasm__DEC], [dasm__DEC]>>8, 1, 0x10 ;DEC r / DEC (HL) + 01900B01 10 - 132: - 09B1 DDFF35FF defb 0xDD, 0xFF, 0x35, 0xFF, 3, [dasm_DD_35], [dasm_DD_35]>>8, 2, 0x08, 0x80 ;DEC (IX + d) - 03550D02 + 132: - 07F1 DDFF35FF defb 0xDD, 0xFF, 0x35, 0xFF, 3, [dasm_DD_35], [dasm_DD_35]>>8, 2, 0x08, 0x80 ;DEC (IX + d) + 03950B02 0880 - 133: - 09BB FDFF35FF defb 0xFD, 0xFF, 0x35, 0xFF, 3, [dasm_FD_35], [dasm_FD_35]>>8, 2, 0x08, 0x80 ;DEC (IY + d) - 03610D02 + 133: - 07FB FDFF35FF defb 0xFD, 0xFF, 0x35, 0xFF, 3, [dasm_FD_35], [dasm_FD_35]>>8, 2, 0x08, 0x80 ;DEC (IY + d) + 03A10B02 0880 134: ;16-Bit Arithmetic Group - 135: - 09C5 09CF0000 defb 0x09, 0xCF, 0x00, 0x00, 1, [dasm_09], [dasm_09]>>8, 1, 0x11 ;ADD HL, ss - 016D0D01 + 135: - 0805 09CF0000 defb 0x09, 0xCF, 0x00, 0x00, 1, [dasm_09], [dasm_09]>>8, 1, 0x11 ;ADD HL, ss + 01AD0B01 11 - 136: - 09CE EDFF4ACF defb 0xED, 0xFF, 0x4A, 0xCF, 2, [dasm_ED_4A], [dasm_ED_4A]>>8, 1, 0x12 ;ADC HL, ss - 02760D01 + 136: - 080E EDFF4ACF defb 0xED, 0xFF, 0x4A, 0xCF, 2, [dasm_ED_4A], [dasm_ED_4A]>>8, 1, 0x12 ;ADC HL, ss + 02B60B01 12 - 137: - 09D7 EDFF42CF defb 0xED, 0xFF, 0x42, 0xCF, 2, [dasm_ED_42], [dasm_ED_42]>>8, 1, 0x12 ;SBC HL, ss - 027F0D01 + 137: - 0817 EDFF42CF defb 0xED, 0xFF, 0x42, 0xCF, 2, [dasm_ED_42], [dasm_ED_42]>>8, 1, 0x12 ;SBC HL, ss + 02BF0B01 12 - 138: - 09E0 DDFF09CF defb 0xDD, 0xFF, 0x09, 0xCF, 2, [dasm_DD_09], [dasm_DD_09]>>8, 1, 0x12 ;ADD IX, ss - 02880D01 + 138: - 0820 DDFF09CF defb 0xDD, 0xFF, 0x09, 0xCF, 2, [dasm_DD_09], [dasm_DD_09]>>8, 1, 0x12 ;ADD IX, ss + 02C80B01 12 - 139: - 09E9 FDFF09CF defb 0xFD, 0xFF, 0x09, 0xCF, 2, [dasm_FD_09], [dasm_FD_09]>>8, 1, 0x12 ;ADD IY, ss - 02910D01 + 139: - 0829 FDFF09CF defb 0xFD, 0xFF, 0x09, 0xCF, 2, [dasm_FD_09], [dasm_FD_09]>>8, 1, 0x12 ;ADD IY, ss + 02D10B01 12 - 140: - 09F2 03CF0000 defb 0x03, 0xCF, 0x00, 0x00, 1, [dasm_03], [dasm_03]>>8, 1, 0x11 ;INC ss - 019A0D01 + 140: - 0832 03CF0000 defb 0x03, 0xCF, 0x00, 0x00, 1, [dasm_03], [dasm_03]>>8, 1, 0x11 ;INC ss + 01DA0B01 11 - 141: - 09FB DDFF23FF defb 0xDD, 0xFF, 0x23, 0xFF, 2, [dasm_DD_23], [dasm_DD_23]>>8, 0 ;INC IX - 029F0D00 - 142: - 0A03 FDFF23FF defb 0xFD, 0xFF, 0x23, 0xFF, 2, [dasm_FD_23], [dasm_FD_23]>>8, 0 ;INC IY - 02A80D00 - 143: - 0A0B 0BCF0000 defb 0x0B, 0xCF, 0x00, 0x00, 1, [dasm_0B], [dasm_0B]>>8, 1, 0x11 ;DEC ss - 01B10D01 + 141: - 083B DDFF23FF defb 0xDD, 0xFF, 0x23, 0xFF, 2, [dasm_DD_23], [dasm_DD_23]>>8, 0 ;INC IX + 02DF0B00 + 142: - 0843 FDFF23FF defb 0xFD, 0xFF, 0x23, 0xFF, 2, [dasm_FD_23], [dasm_FD_23]>>8, 0 ;INC IY + 02E80B00 + 143: - 084B 0BCF0000 defb 0x0B, 0xCF, 0x00, 0x00, 1, [dasm_0B], [dasm_0B]>>8, 1, 0x11 ;DEC ss + 01F10B01 11 - 144: - 0A14 DDFF2BFF defb 0xDD, 0xFF, 0x2B, 0xFF, 2, [dasm_DD_2B], [dasm_DD_2B]>>8, 0 ;DEC IX - 02B60D00 - 145: - 0A1C FDFF2BFF defb 0xFD, 0xFF, 0x2B, 0xFF, 2, [dasm_FD_2B], [dasm_FD_2B]>>8, 0 ;DEC IY - 02BF0D00 + 144: - 0854 DDFF2BFF defb 0xDD, 0xFF, 0x2B, 0xFF, 2, [dasm_DD_2B], [dasm_DD_2B]>>8, 0 ;DEC IX + 02F60B00 + 145: - 085C FDFF2BFF defb 0xFD, 0xFF, 0x2B, 0xFF, 2, [dasm_FD_2B], [dasm_FD_2B]>>8, 0 ;DEC IY + 02FF0B00 146: ;16-Bit Load Group - 147: - 0A24 01CF0000 defb 0x01, 0xCF, 0x00, 0x00, 3, [dasm_01], [dasm_01]>>8, 3, 0x11, 0x80, 0x09 ;LD dd, nn - 03C80D03 + 147: - 0864 01CF0000 defb 0x01, 0xCF, 0x00, 0x00, 3, [dasm_01], [dasm_01]>>8, 3, 0x11, 0x80, 0x09 ;LD dd, nn + 03080C03 118009 - 148: - 0A2F DDFF21FF defb 0xDD, 0xFF, 0x21, 0xFF, 4, [dasm_DD_01], [dasm_DD_01]>>8, 1, 0x0A ;LD IX, nn - 04CF0D01 + 148: - 086F DDFF21FF defb 0xDD, 0xFF, 0x21, 0xFF, 4, [dasm_DD_01], [dasm_DD_01]>>8, 1, 0x0A ;LD IX, nn + 040F0C01 0A - 149: - 0A38 FDFF21FF defb 0xFD, 0xFF, 0x21, 0xFF, 4, [dasm_FD_01], [dasm_FD_01]>>8, 1, 0x0A ;LD IY, nn - 04D70D01 + 149: - 0878 FDFF21FF defb 0xFD, 0xFF, 0x21, 0xFF, 4, [dasm_FD_01], [dasm_FD_01]>>8, 1, 0x0A ;LD IY, nn + 04170C01 0A - 150: - 0A41 2AFF0000 defb 0x2A, 0xFF, 0x00, 0x00, 3, [dasm_2A], [dasm_2A]>>8, 2, 0x09, 0x80 ;LD HL, (nn) - 03DF0D02 + 150: - 0881 2AFF0000 defb 0x2A, 0xFF, 0x00, 0x00, 3, [dasm_2A], [dasm_2A]>>8, 2, 0x09, 0x80 ;LD HL, (nn) + 031F0C02 0980 - 151: - 0A4B EDFF4BCF defb 0xED, 0xFF, 0x4B, 0xCF, 4, [dasm_ED_4B], [dasm_ED_4B]>>8, 4, 0x12, 0x80, 0x0A, 0x81 ;LD dd, (nn) - 04EB0D04 + 151: - 088B EDFF4BCF defb 0xED, 0xFF, 0x4B, 0xCF, 4, [dasm_ED_4B], [dasm_ED_4B]>>8, 4, 0x12, 0x80, 0x0A, 0x81 ;LD dd, (nn) + 042B0C04 12800A81 - 152: - 0A57 DDFF2AFF defb 0xDD, 0xFF, 0x2A, 0xFF, 4, [dasm_DD_2A], [dasm_DD_2A]>>8, 1, 0x0A ;LD IX, (nn) - 04F60D01 + 152: - 0897 DDFF2AFF defb 0xDD, 0xFF, 0x2A, 0xFF, 4, [dasm_DD_2A], [dasm_DD_2A]>>8, 1, 0x0A ;LD IX, (nn) + 04360C01 0A - 153: - 0A60 FDFF2AFF defb 0xFD, 0xFF, 0x2A, 0xFF, 4, [dasm_FD_2A], [dasm_FD_2A]>>8, 1, 0x0A ;LD IY, (nn) - 04020E01 + 153: - 08A0 FDFF2AFF defb 0xFD, 0xFF, 0x2A, 0xFF, 4, [dasm_FD_2A], [dasm_FD_2A]>>8, 1, 0x0A ;LD IY, (nn) + 04420C01 0A - 154: - 0A69 22FF0000 defb 0x22, 0xFF, 0x00, 0x00, 3, [dasm_22], [dasm_22]>>8, 2, 0x0A, 0x80 ;LD (nn), HL - 030E0E02 + 154: - 08A9 22FF0000 defb 0x22, 0xFF, 0x00, 0x00, 3, [dasm_22], [dasm_22]>>8, 2, 0x0A, 0x80 ;LD (nn), HL + 034E0C02 0A80 - 155: - 0A73 EDFF43CF defb 0xED, 0xFF, 0x43, 0xCF, 4, [dasm_ED_43], [dasm_ED_43]>>8, 3, 0x0A, 0x80, 0x12 ;LD (nn), dd - 041A0E03 + 155: - 08B3 EDFF43CF defb 0xED, 0xFF, 0x43, 0xCF, 4, [dasm_ED_43], [dasm_ED_43]>>8, 3, 0x0A, 0x80, 0x12 ;LD (nn), dd + 045A0C03 0A8012 - 156: - 0A7E DDFF22CF defb 0xDD, 0xFF, 0x22, 0xCF, 4, [dasm_DD_22], [dasm_DD_22]>>8, 2, 0x0A, 0x80 ;LD (nn), IX - 04240E02 + 156: - 08BE DDFF22CF defb 0xDD, 0xFF, 0x22, 0xCF, 4, [dasm_DD_22], [dasm_DD_22]>>8, 2, 0x0A, 0x80 ;LD (nn), IX + 04640C02 0A80 - 157: - 0A88 FDFF22CF defb 0xFD, 0xFF, 0x22, 0xCF, 4, [dasm_FD_22], [dasm_FD_22]>>8, 2, 0x0A, 0x80 ;LD (nn), IY - 04300E02 + 157: - 08C8 FDFF22CF defb 0xFD, 0xFF, 0x22, 0xCF, 4, [dasm_FD_22], [dasm_FD_22]>>8, 2, 0x0A, 0x80 ;LD (nn), IY + 04700C02 0A80 - 158: - 0A92 F9FF0000 defb 0xF9, 0xFF, 0x00, 0x00, 1, [dasm_F9], [dasm_F9]>>8, 0 ;LD SP, HL - 013C0E00 - 159: - 0A9A DDFFF9FF defb 0xDD, 0xFF, 0xF9, 0xFF, 2, [dasm_DD_F9], [dasm_DD_F9]>>8, 0 ;LD SP, IX - 02460E00 - 160: - 0AA2 FDFFF9FF defb 0xFD, 0xFF, 0xF9, 0xFF, 2, [dasm_FD_F9], [dasm_FD_F9]>>8, 0 ;LD SP, IY - 02500E00 - 161: - 0AAA C5CF0000 defb 0xC5, 0xCF, 0x00, 0x00, 1, [dasm_E5], [dasm_E5]>>8, 1, 0x13 ;PUSH qq - 015A0E01 + 158: - 08D2 F9FF0000 defb 0xF9, 0xFF, 0x00, 0x00, 1, [dasm_F9], [dasm_F9]>>8, 0 ;LD SP, HL + 017C0C00 + 159: - 08DA DDFFF9FF defb 0xDD, 0xFF, 0xF9, 0xFF, 2, [dasm_DD_F9], [dasm_DD_F9]>>8, 0 ;LD SP, IX + 02860C00 + 160: - 08E2 FDFFF9FF defb 0xFD, 0xFF, 0xF9, 0xFF, 2, [dasm_FD_F9], [dasm_FD_F9]>>8, 0 ;LD SP, IY + 02900C00 + 161: - 08EA C5CF0000 defb 0xC5, 0xCF, 0x00, 0x00, 1, [dasm_E5], [dasm_E5]>>8, 1, 0x13 ;PUSH qq + 019A0C01 13 - 162: - 0AB3 DDFFE5FF defb 0xDD, 0xFF, 0xE5, 0xFF, 2, [dasm_DD_E5], [dasm_DD_E5]>>8, 0 ;PUSH IX - 02600E00 - 163: - 0ABB FDFFE5FF defb 0xFD, 0xFF, 0xE5, 0xFF, 2, [dasm_FD_E5], [dasm_FD_E5]>>8, 0 ;PUSH IY - 02680E00 - 164: - 0AC3 C1CF0000 defb 0xC1, 0xCF, 0x00, 0x00, 1, [dasm_E1], [dasm_E1]>>8, 1, 0x13 ;POP qq - 01700E01 + 162: - 08F3 DDFFE5FF defb 0xDD, 0xFF, 0xE5, 0xFF, 2, [dasm_DD_E5], [dasm_DD_E5]>>8, 0 ;PUSH IX + 02A00C00 + 163: - 08FB FDFFE5FF defb 0xFD, 0xFF, 0xE5, 0xFF, 2, [dasm_FD_E5], [dasm_FD_E5]>>8, 0 ;PUSH IY + 02A80C00 + 164: - 0903 C1CF0000 defb 0xC1, 0xCF, 0x00, 0x00, 1, [dasm_E1], [dasm_E1]>>8, 1, 0x13 ;POP qq + 01B00C01 13 - 165: - 0ACC DDFFE1FF defb 0xDD, 0xFF, 0xE1, 0xFF, 2, [dasm_DD_E1], [dasm_DD_E1]>>8, 0 ;POP IX - 02760E00 - 166: - 0AD4 FDFFE1FF defb 0xFD, 0xFF, 0xE1, 0xFF, 2, [dasm_FD_E1], [dasm_FD_E1]>>8, 0 ;POP IY - 027E0E00 + 165: - 090C DDFFE1FF defb 0xDD, 0xFF, 0xE1, 0xFF, 2, [dasm_DD_E1], [dasm_DD_E1]>>8, 0 ;POP IX + 02B60C00 + 166: - 0914 FDFFE1FF defb 0xFD, 0xFF, 0xE1, 0xFF, 2, [dasm_FD_E1], [dasm_FD_E1]>>8, 0 ;POP IY + 02BE0C00 167: 168: - 169: - 0ADC 4E4F5000 dasm_00: db "NOP",0x00 + 169: - 091C 4E4F5000 dasm_00: db "NOP",0x00 170: ;JUMP Group - 171: - 0AE0 4A502000 dasm_C3: db "JP ",0x00,", ",0x00 + 171: - 0920 4A502000 dasm_C3: db "JP ",0x00,", ",0x00 2C2000 - 172: - 0AE7 4A522000 dasm_18: db "JR ",0x00 - 173: - 0AEB 4A522043 dasm_38: db "JR C, ",0x00 + 172: - 0927 4A522000 dasm_18: db "JR ",0x00 + 173: - 092B 4A522043 dasm_38: db "JR C, ",0x00 2C2000 - 174: - 0AF2 4A52204E dasm_30: db "JR NC, ",0x00 + 174: - 0932 4A52204E dasm_30: db "JR NC, ",0x00 432C2000 - 175: - 0AFA 4A52205A dasm_28: db "JR Z, ",0x00 + 175: - 093A 4A52205A dasm_28: db "JR Z, ",0x00 2C2000 - 176: - 0B01 4A52204E dasm_20: db "JR NZ, ",0x00 + 176: - 0941 4A52204E dasm_20: db "JR NZ, ",0x00 5A2C2000 - 177: - 0B09 4A502028 dasm_E9: db "JP (HL) ",0x00 + 177: - 0949 4A502028 dasm_E9: db "JP (HL) ",0x00 484C2920 00 - 178: - 0B12 4A502028 dasm_DD: db "JP (IX) ",0x00 + 178: - 0952 4A502028 dasm_DD: db "JP (IX) ",0x00 49582920 00 - 179: - 0B1B 4A502028 dasm_FD: db "JP (IY) ",0x00 + 179: - 095B 4A502028 dasm_FD: db "JP (IY) ",0x00 49592920 00 - 180: - 0B24 444A4E5A dasm_10: db "DJNZ ",0x00 + 180: - 0964 444A4E5A dasm_10: db "DJNZ ",0x00 2000 181: ;Call and Return Group - 182: - 0B2A 43414C4C dasm_CD: db "CALL ",0x00 + 182: - 096A 43414C4C dasm_CD: db "CALL ",0x00 2000 - 183: - 0B30 52455420 dasm_C9: db "RET ",0x00 + 183: - 0970 52455420 dasm_C9: db "RET ",0x00 00 - 184: - 0B35 52455449 dasm_ED_4D: db "RETI",0x00 + 184: - 0975 52455449 dasm_ED_4D: db "RETI",0x00 00 - 185: - 0B3A 5245544E dasm_ED_45: db "RETN",0x00 + 185: - 097A 5245544E dasm_ED_45: db "RETN",0x00 00 - 186: - 0B3F 52535420 dasm_FF: db "RST ",0x00 + 186: - 097F 52535420 dasm_FF: db "RST ",0x00 00 187: ;8-Bit load group - 188: - 0B44 4C442041 dasm_0A: db "LD A,(BC)",0x00 + 188: - 0984 4C442041 dasm_0A: db "LD A,(BC)",0x00 2C284243 2900 - 189: - 0B4E 4C442041 dasm_1A: db "LD A,(DE)",0x00 + 189: - 098E 4C442041 dasm_1A: db "LD A,(DE)",0x00 2C284445 2900 - 190: - 0B58 4C442041 dasm_3A: db "LD A,(",0x00, "h)",0x00 + 190: - 0998 4C442041 dasm_3A: db "LD A,(",0x00, "h)",0x00 2C280068 2900 - 191: - 0B62 4C442028 dasm_02: db "LD (BC), A",0x00 + 191: - 09A2 4C442028 dasm_02: db "LD (BC), A",0x00 4243292C 204100 - 192: - 0B6D 4C442028 dasm_12: db "LD (DE), A",0x00 + 192: - 09AD 4C442028 dasm_12: db "LD (DE), A",0x00 4445292C 204100 - 193: - 0B78 4C442028 dasm_32: db "LD (",0x00, "h), A",0x00 + 193: - 09B8 4C442028 dasm_32: db "LD (",0x00, "h), A",0x00 0068292C 204100 - 194: - 0B83 4C442000 dasm__LD: db "LD ",0x00 - 195: - 0B87 4C442041 dasm__ED_57: db "LD A, I",0x00 + 194: - 09C3 4C442000 dasm__LD: db "LD ",0x00 + 195: - 09C7 4C442041 dasm__ED_57: db "LD A, I",0x00 2C204900 - 196: - 0B8F 4C442041 dasm__ED_5F: db "LD A, R",0x00 + 196: - 09CF 4C442041 dasm__ED_5F: db "LD A, R",0x00 2C205200 - 197: - 0B97 4C442049 dasm__ED_47: db "LD I, A",0x00 + 197: - 09D7 4C442049 dasm__ED_47: db "LD I, A",0x00 2C204100 - 198: - 0B9F 4C442052 dasm__ED_4F: db "LD R, A",0x00 + 198: - 09DF 4C442052 dasm__ED_4F: db "LD R, A",0x00 2C204100 199: ;General-Purpose Arithmetic and CPU Control Groups - 200: - 0BA7 44414100 dasm_27: db "DAA",0x00 - 201: - 0BAB 43504C00 dasm_2F: db "CPL",0x00 - 202: - 0BAF 4E454700 dasm_ED_44: db "NEG",0x00 - 203: - 0BB3 43434600 dasm_3F: db "CCF",0x00 - 204: - 0BB7 53434600 dasm_37: db "SCF",0x00 - 205: - 0BBB 48414C54 dasm_76: db "HALT",0x00 + 200: - 09E7 44414100 dasm_27: db "DAA",0x00 + 201: - 09EB 43504C00 dasm_2F: db "CPL",0x00 + 202: - 09EF 4E454700 dasm_ED_44: db "NEG",0x00 + 203: - 09F3 43434600 dasm_3F: db "CCF",0x00 + 204: - 09F7 53434600 dasm_37: db "SCF",0x00 + 205: - 09FB 48414C54 dasm_76: db "HALT",0x00 00 - 206: - 0BC0 444900 dasm_F3: db "DI",0x00 - 207: - 0BC3 454900 dasm_FB: db "EI",0x00 - 208: - 0BC6 494D2030 dasm_ED_46: db "IM 0",0x00 + 206: - 0A00 444900 dasm_F3: db "DI",0x00 + 207: - 0A03 454900 dasm_FB: db "EI",0x00 + 208: - 0A06 494D2030 dasm_ED_46: db "IM 0",0x00 00 - 209: - 0BCB 494D2031 dasm_ED_56: db "IM 1",0x00 + 209: - 0A0B 494D2031 dasm_ED_56: db "IM 1",0x00 00 - 210: - 0BD0 494D2032 dasm_ED_5E: db "IM 2",0x00 + 210: - 0A10 494D2032 dasm_ED_5E: db "IM 2",0x00 00 211: ;Exchange, Block Transfer, and Search Group - 212: - 0BD5 45582044 dasm_BE: db "EX DE, HL",0x00 + 212: - 0A15 45582044 dasm_BE: db "EX DE, HL",0x00 452C2048 4C00 - 213: - 0BDF 45582041 dasm_08: db "EX AF, AF′",0x00 + 213: - 0A1F 45582041 dasm_08: db "EX AF, AF′",0x00 462C2041 46E280B2 00 - 214: - 0BEC 45585800 dasm_D9: db "EXX",0x00 - 215: - 0BF0 45582028 dasm_E3: db "EX (SP), HL",0x00 + 214: - 0A2C 45585800 dasm_D9: db "EXX",0x00 + 215: - 0A30 45582028 dasm_E3: db "EX (SP), HL",0x00 5350292C 20484C00 - 216: - 0BFC 45582028 dasm_DD_E3: db "EX (SP), IX",0x00 + 216: - 0A3C 45582028 dasm_DD_E3: db "EX (SP), IX",0x00 5350292C 20495800 - 217: - 0C08 45582028 dasm_FD_E3: db "EX (SP), IY",0x00 + 217: - 0A48 45582028 dasm_FD_E3: db "EX (SP), IY",0x00 5350292C 20495900 - 218: - 0C14 4C444900 dasm_ED_A0: db "LDI",0x00 - 219: - 0C18 4C444952 dasm_ED_B0: db "LDIR",0x00 + 218: - 0A54 4C444900 dasm_ED_A0: db "LDI",0x00 + 219: - 0A58 4C444952 dasm_ED_B0: db "LDIR",0x00 00 - 220: - 0C1D 4C444400 dasm_ED_A8: db "LDD",0x00 - 221: - 0C21 4C444452 dasm_ED_B8: db "LDDR",0x00 + 220: - 0A5D 4C444400 dasm_ED_A8: db "LDD",0x00 + 221: - 0A61 4C444452 dasm_ED_B8: db "LDDR",0x00 00 - 222: - 0C26 43504900 dasm_ED_A1: db "CPI",0x00 - 223: - 0C2A 43504952 dasm_ED_B1: db "CPIR",0x00 + 222: - 0A66 43504900 dasm_ED_A1: db "CPI",0x00 + 223: - 0A6A 43504952 dasm_ED_B1: db "CPIR",0x00 00 - 224: - 0C2F 43504400 dasm_ED_A9: db "CPD",0x00 - 225: - 0C33 43504452 dasm_ED_B9: db "CPDR",0x00 + 224: - 0A6F 43504400 dasm_ED_A9: db "CPD",0x00 + 225: - 0A73 43504452 dasm_ED_B9: db "CPDR",0x00 00 226: ;8-Bit Arithmetic Group - 227: - 0C38 41444420 dasm_80C6: db "ADD A, ", 0x00 + 227: - 0A78 41444420 dasm_80C6: db "ADD A, ", 0x00 412C2000 - 228: - 0C40 41444420 dasm_DD_86: db "ADD A, (IX+", 0x00, "h)",0x00 + 228: - 0A80 41444420 dasm_DD_86: db "ADD A, (IX+", 0x00, "h)",0x00 412C2028 49582B00 682900 - 229: - 0C4F 41444420 dasm_FD_86: db "ADD A, (IY+", 0x00, "h)",0x00 + 229: - 0A8F 41444420 dasm_FD_86: db "ADD A, (IY+", 0x00, "h)",0x00 412C2028 49592B00 682900 - 230: - 0C5E 41444320 dasm_C88E: db "ADC A, ", 0x00 + 230: - 0A9E 41444320 dasm_C88E: db "ADC A, ", 0x00 412C2000 - 231: - 0C66 41444320 dasm_DD_8E: db "ADC A, (IX+", 0x00, "h)",0x00 + 231: - 0AA6 41444320 dasm_DD_8E: db "ADC A, (IX+", 0x00, "h)",0x00 412C2028 49582B00 682900 - 232: - 0C75 41444320 dasm_FD_8E: db "ADC A, (IY+", 0x00, "h)",0x00 + 232: - 0AB5 41444320 dasm_FD_8E: db "ADC A, (IY+", 0x00, "h)",0x00 412C2028 49592B00 682900 - 233: - 0C84 53554220 dasm__SUB: db "SUB ", 0x00 + 233: - 0AC4 53554220 dasm__SUB: db "SUB ", 0x00 00 - 234: - 0C89 53554220 dasm_DD_96: db "SUB (IX+", 0x00, "h)",0x00 + 234: - 0AC9 53554220 dasm_DD_96: db "SUB (IX+", 0x00, "h)",0x00 2849582B 00682900 - 235: - 0C95 53554220 dasm_FD_96: db "SUB (IY+", 0x00, "h)",0x00 + 235: - 0AD5 53554220 dasm_FD_96: db "SUB (IY+", 0x00, "h)",0x00 2849592B 00682900 - 236: - 0CA1 53424320 dasm__SBC: db "SBC A, ", 0x00 + 236: - 0AE1 53424320 dasm__SBC: db "SBC A, ", 0x00 412C2000 - 237: - 0CA9 53424320 dasm_DD_9E: db "SBC A,(IX+", 0x00, "h)",0x00 + 237: - 0AE9 53424320 dasm_DD_9E: db "SBC A,(IX+", 0x00, "h)",0x00 412C2849 582B0068 2900 - 238: - 0CB7 53424320 dasm_FD_9E: db "SBC A,(IY+", 0x00, "h)",0x00 + 238: - 0AF7 53424320 dasm_FD_9E: db "SBC A,(IY+", 0x00, "h)",0x00 412C2849 592B0068 2900 - 239: - 0CC5 414E4420 dasm__AND: db "AND ", 0x00 + 239: - 0B05 414E4420 dasm__AND: db "AND ", 0x00 00 - 240: - 0CCA 414E4420 dasm_DD_A6: db "AND (IX+", 0x00, "h)",0x00 + 240: - 0B0A 414E4420 dasm_DD_A6: db "AND (IX+", 0x00, "h)",0x00 2849582B 00682900 - 241: - 0CD6 414E4420 dasm_FD_A6: db "AND (IY+", 0x00, "h)",0x00 + 241: - 0B16 414E4420 dasm_FD_A6: db "AND (IY+", 0x00, "h)",0x00 2849592B 00682900 - 242: - 0CE2 4F522000 dasm__OR: db "OR ", 0x00 - 243: - 0CE6 4F522028 dasm_DD_B6: db "OR (IX+", 0x00, "h)",0x00 + 242: - 0B22 4F522000 dasm__OR: db "OR ", 0x00 + 243: - 0B26 4F522028 dasm_DD_B6: db "OR (IX+", 0x00, "h)",0x00 49582B00 682900 - 244: - 0CF1 4F522028 dasm_FD_B6: db "OR (IY+", 0x00, "h)",0x00 + 244: - 0B31 4F522028 dasm_FD_B6: db "OR (IY+", 0x00, "h)",0x00 49592B00 682900 - 245: - 0CFC 584F5220 dasm__XOR: db "XOR ", 0x00 + 245: - 0B3C 584F5220 dasm__XOR: db "XOR ", 0x00 00 - 246: - 0D01 584F5220 dasm_DD_AE: db "XOR (IX+", 0x00, "h)",0x00 + 246: - 0B41 584F5220 dasm_DD_AE: db "XOR (IX+", 0x00, "h)",0x00 2849582B 00682900 - 247: - 0D0D 584F5220 dasm_FD_AE: db "XOR (IY+", 0x00, "h)",0x00 + 247: - 0B4D 584F5220 dasm_FD_AE: db "XOR (IY+", 0x00, "h)",0x00 2849592B 00682900 - 248: - 0D19 43502000 dasm__CP: db "CP ", 0x00 - 249: - 0D1D 43502028 dasm_DD_BE: db "CP (IX+", 0x00, "h)",0x00 + 248: - 0B59 43502000 dasm__CP: db "CP ", 0x00 + 249: - 0B5D 43502028 dasm_DD_BE: db "CP (IX+", 0x00, "h)",0x00 49582B00 682900 - 250: - 0D28 43502028 dasm_FD_BE: db "CP (IY+", 0x00, "h)",0x00 + 250: - 0B68 43502028 dasm_FD_BE: db "CP (IY+", 0x00, "h)",0x00 49592B00 682900 - 251: - 0D33 494E4320 dasm__INC: db "INC ", 0x00 + 251: - 0B73 494E4320 dasm__INC: db "INC ", 0x00 00 - 252: - 0D38 494E4320 dasm_DD_34: db "INC (IX+", 0x00, "h)",0x00 + 252: - 0B78 494E4320 dasm_DD_34: db "INC (IX+", 0x00, "h)",0x00 2849582B 00682900 - 253: - 0D44 494E4320 dasm_FD_34: db "INC (IY+", 0x00, "h)",0x00 + 253: - 0B84 494E4320 dasm_FD_34: db "INC (IY+", 0x00, "h)",0x00 2849592B 00682900 - 254: - 0D50 44454320 dasm__DEC: db "DEC ", 0x00 + 254: - 0B90 44454320 dasm__DEC: db "DEC ", 0x00 00 - 255: - 0D55 44454320 dasm_DD_35: db "DEC (IX+", 0x00, "h)",0x00 + 255: - 0B95 44454320 dasm_DD_35: db "DEC (IX+", 0x00, "h)",0x00 2849582B 00682900 - 256: - 0D61 44454320 dasm_FD_35: db "DEC (IY+", 0x00, "h)",0x00 + 256: - 0BA1 44454320 dasm_FD_35: db "DEC (IY+", 0x00, "h)",0x00 2849592B 00682900 257: ;16-Bit Arithmetic Group - 258: - 0D6D 41444420 dasm_09: db "ADD HL, ",0x00 + 258: - 0BAD 41444420 dasm_09: db "ADD HL, ",0x00 484C2C20 00 - 259: - 0D76 41444320 dasm_ED_4A: db "ADC HL, ",0x00 + 259: - 0BB6 41444320 dasm_ED_4A: db "ADC HL, ",0x00 484C2C20 00 - 260: - 0D7F 53424320 dasm_ED_42: db "SBC HL, ",0x00 + 260: - 0BBF 53424320 dasm_ED_42: db "SBC HL, ",0x00 484C2C20 00 - 261: - 0D88 41444420 dasm_DD_09: db "ADD IX, ",0x00 + 261: - 0BC8 41444420 dasm_DD_09: db "ADD IX, ",0x00 49582C20 00 - 262: - 0D91 41444420 dasm_FD_09: db "ADD IY, ",0x00 + 262: - 0BD1 41444420 dasm_FD_09: db "ADD IY, ",0x00 49592C20 00 - 263: - 0D9A 494E4320 dasm_03: db "INC ",0x00 + 263: - 0BDA 494E4320 dasm_03: db "INC ",0x00 00 - 264: - 0D9F 494E4320 dasm_DD_23: db "INC IX, ",0x00 + 264: - 0BDF 494E4320 dasm_DD_23: db "INC IX, ",0x00 49582C20 00 - 265: - 0DA8 494E4320 dasm_FD_23: db "INC IY, ",0x00 + 265: - 0BE8 494E4320 dasm_FD_23: db "INC IY, ",0x00 49592C20 00 - 266: - 0DB1 44454320 dasm_0B: db "DEC ",0x00 + 266: - 0BF1 44454320 dasm_0B: db "DEC ",0x00 00 - 267: - 0DB6 44454320 dasm_DD_2B: db "DEC IX, ",0x00 + 267: - 0BF6 44454320 dasm_DD_2B: db "DEC IX, ",0x00 49582C20 00 - 268: - 0DBF 44454320 dasm_FD_2B: db "DEC IY, ",0x00 + 268: - 0BFF 44454320 dasm_FD_2B: db "DEC IY, ",0x00 49592C20 00 269: ;16-Bit Load Group - 270: - 0DC8 4C442000 dasm_01: db "LD ",0x00, ", ",0x00 + 270: - 0C08 4C442000 dasm_01: db "LD ",0x00, ", ",0x00 2C2000 - 271: - 0DCF 4C442049 dasm_DD_01: db "LD IX, ",0x00 + 271: - 0C0F 4C442049 dasm_DD_01: db "LD IX, ",0x00 582C2000 - 272: - 0DD7 4C442049 dasm_FD_01: db "LD IY, ",0x00 + 272: - 0C17 4C442049 dasm_FD_01: db "LD IY, ",0x00 592C2000 - 273: - 0DDF 4C442048 dasm_2A: db "LD HL, (",0x00,"h)",0x00 + 273: - 0C1F 4C442048 dasm_2A: db "LD HL, (",0x00,"h)",0x00 4C2C2028 00682900 - 274: - 0DEB 4C442000 dasm_ED_4B: db "LD ",0x00,", (",0x00,"h)",0x00 + 274: - 0C2B 4C442000 dasm_ED_4B: db "LD ",0x00,", (",0x00,"h)",0x00 2C202800 682900 - 275: - 0DF6 4C442049 dasm_DD_2A: db "LD IX, (",0x00,"h)",0x00 + 275: - 0C36 4C442049 dasm_DD_2A: db "LD IX, (",0x00,"h)",0x00 582C2028 00682900 - 276: - 0E02 4C442049 dasm_FD_2A: db "LD IY, (",0x00,"h)",0x00 + 276: - 0C42 4C442049 dasm_FD_2A: db "LD IY, (",0x00,"h)",0x00 592C2028 00682900 - 277: - 0E0E 4C442028 dasm_22: db "LD (",0x00,"h), HL",0x00 + 277: - 0C4E 4C442028 dasm_22: db "LD (",0x00,"h), HL",0x00 0068292C 20484C00 - 278: - 0E1A 4C442028 dasm_ED_43: db "LD (",0x00,"h), ",0x00 + 278: - 0C5A 4C442028 dasm_ED_43: db "LD (",0x00,"h), ",0x00 0068292C 2000 - 279: - 0E24 4C442028 dasm_DD_22: db "LD (",0x00,"h), IX",0x00 + 279: - 0C64 4C442028 dasm_DD_22: db "LD (",0x00,"h), IX",0x00 0068292C 20495800 - 280: - 0E30 4C442028 dasm_FD_22: db "LD (",0x00,"h), IY",0x00 + 280: - 0C70 4C442028 dasm_FD_22: db "LD (",0x00,"h), IY",0x00 0068292C 20495900 - 281: - 0E3C 4C442053 dasm_F9: db "LD SP, HL",0x00 + 281: - 0C7C 4C442053 dasm_F9: db "LD SP, HL",0x00 502C2048 4C00 - 282: - 0E46 4C442053 dasm_DD_F9: db "LD SP, IX",0x00 + 282: - 0C86 4C442053 dasm_DD_F9: db "LD SP, IX",0x00 502C2049 5800 - 283: - 0E50 4C442053 dasm_FD_F9: db "LD SP, IY",0x00 + 283: - 0C90 4C442053 dasm_FD_F9: db "LD SP, IY",0x00 502C2049 5900 - 284: - 0E5A 50555348 dasm_E5: db "PUSH ",0x00 + 284: - 0C9A 50555348 dasm_E5: db "PUSH ",0x00 2000 - 285: - 0E60 50555348 dasm_DD_E5: db "PUSH IX",0x00 + 285: - 0CA0 50555348 dasm_DD_E5: db "PUSH IX",0x00 20495800 - 286: - 0E68 50555348 dasm_FD_E5: db "PUSH IY",0x00 + 286: - 0CA8 50555348 dasm_FD_E5: db "PUSH IY",0x00 20495900 - 287: - 0E70 50555348 dasm_E1: db "PUSH ",0x00 + 287: - 0CB0 50555348 dasm_E1: db "PUSH ",0x00 2000 - 288: - 0E76 50555348 dasm_DD_E1: db "PUSH IX",0x00 + 288: - 0CB6 50555348 dasm_DD_E1: db "PUSH IX",0x00 20495800 - 289: - 0E7E 50555348 dasm_FD_E1: db "PUSH IY",0x00 + 289: - 0CBE 50555348 dasm_FD_E1: db "PUSH IY",0x00 20495900 290: 291: ;Misc - 292: - 0E86 2E3F2E00 dasm_UU: db ".?.",0x00 - 293: - 0E8A 20202020 dasm_UW: db " ",0x00 + 292: - 0CC6 2E3F2E00 dasm_UU: db ".?.",0x00 + 293: - 0CCA 20202020 dasm_UW: db " ",0x00 00 294: - 295: - 0E8F dasm_printFlags_table: - 296: - 0E8F 4E5A db "NZ" - 297: - 0E91 5A00 db "Z",0 - 298: - 0E93 4E43 db "NC" - 299: - 0E95 4300 db "C",0 - 300: - 0E97 504F db "PO" - 301: - 0E99 5045 db "PE" - 302: - 0E9B 5000 db "P",0 - 303: - 0E9D 4D00 db "M",0 + 295: - 0CCF dasm_printFlags_table: + 296: - 0CCF 4E5A db "NZ" + 297: - 0CD1 5A00 db "Z",0 + 298: - 0CD3 4E43 db "NC" + 299: - 0CD5 4300 db "C",0 + 300: - 0CD7 504F db "PO" + 301: - 0CD9 5045 db "PE" + 302: - 0CDB 5000 db "P",0 + 303: - 0CDD 4D00 db "M",0 304: - 305: - 0E9F dasm_printRegister8_table: - 306: - 0E9F 42 db "B" - 307: - 0EA0 43 db "C" - 308: - 0EA1 44 db "D" - 309: - 0EA2 45 db "E" - 310: - 0EA3 48 db "H" - 311: - 0EA4 4C db "L" - 312: - 0EA5 53 db "S" ;only 18 bit (SP) - 313: - 0EA6 50 db "P" ;only 18 bit (SP) + 305: - 0CDF dasm_printRegister8_table: + 306: - 0CDF 42 db "B" + 307: - 0CE0 43 db "C" + 308: - 0CE1 44 db "D" + 309: - 0CE2 45 db "E" + 310: - 0CE3 48 db "H" + 311: - 0CE4 4C db "L" + 312: - 0CE5 53 db "S" ;only 18 bit (SP) + 313: - 0CE6 50 db "P" ;only 18 bit (SP) 314: - 315: - 0EA7 dasm_printRegisterIX_table: - 316: - 0EA7 4243 db "BC" - 317: - 0EA9 4445 db "DE" - 318: - 0EAB 4958 db "IX" - 319: - 0EAD 5350 db "SP" - 320: - 0EAF dasm_printRegisterIY_table: - 321: - 0EAF 4243 db "BC" - 322: - 0EB1 4445 db "DE" - 323: - 0EB3 4959 db "IY" - 324: - 0EB5 5350 db "SP" + 315: - 0CE7 dasm_printRegisterIX_table: + 316: - 0CE7 4243 db "BC" + 317: - 0CE9 4445 db "DE" + 318: - 0CEB 4958 db "IX" + 319: - 0CED 5350 db "SP" + 320: - 0CEF dasm_printRegisterIY_table: + 321: - 0CEF 4243 db "BC" + 322: - 0CF1 4445 db "DE" + 323: - 0CF3 4959 db "IY" + 324: - 0CF5 5350 db "SP" 325: - 326: - 0EB7 dasm_printRegisterSP_table: - 327: - 0EB7 4243 db "BC" - 328: - 0EB9 4445 db "DE" - 329: - 0EBB 484C db "HL" - 330: - 0EBD 4146 db "AF" + 326: - 0CF7 dasm_printRegisterSP_table: + 327: - 0CF7 4243 db "BC" + 328: - 0CF9 4445 db "DE" + 329: - 0CFB 484C db "HL" + 330: - 0CFD 4146 db "AF" 331: - 332: - 0EBF dasm_printRegister8_table_HL: + 332: - 0CFF dasm_printRegister8_table_HL: **** main.asm **** - 496: - 0EBF 28484C29 db "(HL)", 0 + 171: - 0CFF 28484C29 db "(HL)", 0 00 - 497: .include "rst.s" + 172: .include "rst.s" **** include/rst.s **** - 1: - 0EC4 EXEC_RST_08: - 2: 7944+17 0EC4 CDB702 call print_char - 3: 7961+10 0EC7 C9 ret + 1: - 0D04 EXEC_RST_08: + 2: 5949+17 0D04 CDD700 call print_char + 3: 5966+10 0D07 C9 ret 4: 5: - 6: - 0EC8 EXEC_RST_10: - 7: 7971+11 0EC8 C5 push bc - 8: 7982+11 0EC9 D5 push de - 9: 7993+11 0ECA E5 push hl + 6: - 0D08 EXEC_RST_10: + 7: 5976+11 0D08 C5 push bc + 8: 5987+11 0D09 D5 push de + 9: 5998+11 0D0A E5 push hl 10: ;call vdp_cursor_on - 11: 8004+17 0ECB CDF802 call read_char - 12: 8021+11 0ECE F5 push af + 11: 6009+17 0D0B CD1F01 call read_char + 12: 6026+11 0D0E F5 push af 13: ;call vdp_cursor_off - 14: 8032+10 0ECF F1 pop af - 15: 8042+10 0ED0 E1 pop hl - 16: 8052+10 0ED1 D1 pop de - 17: 8062+10 0ED2 C1 pop bc - 18: 8072+10 0ED3 C9 ret + 14: 6037+10 0D0F F1 pop af + 15: 6047+10 0D10 E1 pop hl + 16: 6057+10 0D11 D1 pop de + 17: 6067+10 0D12 C1 pop bc + 18: 6077+10 0D13 C9 ret 19: - 20: - 0ED4 EXEC_RST_18: - 21: 8082+7 0ED4 3E00 ld a,0 - 22: 8089+10 0ED6 C9 ret + 20: - 0D14 EXEC_RST_18: + 21: 6087+7 0D14 3E00 ld a,0 + 22: 6094+10 0D16 C9 ret **** main.asm **** - 498: .include "beep.s" + 173: .include "beep.s" **** include/beep.s **** 1: ;------------------------------------------------------------------------------ 2: ; beep @@ -2067,341 +1765,39 @@ 4: ; Beeps the speaker 5: ; DE sets duration 6: ;------------------------------------------------------------------------------ - 7: - 0ED7 beep: - 8: 8099+11 0ED7 F5 push AF - 9: 8110+11 0ED8 C5 push BC - 10: 8121+11 0ED9 D5 push DE - 11: - 0EDA beep_loop: - 12: 8132+7 0EDA 3E08 LD A,0x08 - 13: 8139+11 0EDC D3F4 OUT (CS_PIO_AD), A - 14: 8150+10 0EDE 012800 LD BC, 0x28 - 15: 8160+17 0EE1 CDF70E CALL beep_pause - 16: 8177+7 0EE4 3E00 LD A,0x00 - 17: 8184+11 0EE6 D3F4 OUT (CS_PIO_AD), A - 18: 8195+10 0EE8 012400 LD BC, 0x24 - 19: 8205+17 0EEB CDF70E CALL beep_pause - 20: 8222+6 0EEE 1B DEC DE - 21: 8228+4 0EEF 7A ld A,D - 22: 8232+4 0EF0 B3 or E - 23: 8236+7+5 0EF1 20E7 jr NZ, beep_loop - 24: 8243+10 0EF3 D1 pop de - 25: 8253+10 0EF4 C1 pop bc - 26: 8263+10 0EF5 F1 pop af - 27: 8273+10 0EF6 C9 ret - 28: - 29: - 0EF7 beep_pause: - 30: 8283+8 0EF7 ED44 NEG ; 8 T-states - 31: 8291+8 0EF9 ED44 NEG ; 8 T-states - 32: 8299+8 0EFB ED44 NEG ; 8 T-states - 33: 8307+8 0EFD ED44 NEG ; 8 T-states - 34: 8315+6 0EFF 0B DEC BC ; 6 T-states - 35: 8321+4 0F00 79 LD A,C ; 9 T-states - 36: 8325+4 0F01 B0 OR B ; 4 T-states - 37: 8329+10 0F02 C2F70E JP NZ,beep_pause ; 10 T-states + 7: - 0D17 beep: + 8: 6104+11 0D17 F5 push AF + 9: 6115+11 0D18 D5 push DE + 10: - 0D19 beep_loop: + 11: 6126+7 0D19 3E08 LD A,0x08 + 12: 6133+11 0D1B D3F4 OUT (CS_PIO_AD), A + 13: 6144+17 0D1D CD2F0D CALL beep_pause + 14: 6161+7 0D20 3E00 LD A,0x00 + 15: 6168+11 0D22 D3F4 OUT (CS_PIO_AD), A + 16: 6179+17 0D24 CD2F0D CALL beep_pause + 17: 6196+6 0D27 1B DEC DE + 18: 6202+4 0D28 7A ld A,D + 19: 6206+4 0D29 B3 or E + 20: 6210+7+5 0D2A 20ED jr NZ, beep_loop + 21: 6217+10 0D2C D1 pop de + 22: 6227+10 0D2D F1 pop af + 23: 6237+10 0D2E C9 ret + 24: + 25: - 0D2F beep_pause: + 26: 6247+11 0D2F C5 PUSH BC + 27: - 0D30 _beep_pause_l1: + 28: ;NEG ; 8 T-states + 29: ;NEG ; 8 T-states + 30: 6258+8 0D30 ED44 NEG ; 8 T-states + 31: 6266+8 0D32 ED44 NEG ; 8 T-states + 32: 6274+6 0D34 0B DEC BC ; 6 T-states + 33: 6280+4 0D35 79 LD A,C ; 9 T-states + 34: 6284+4 0D36 B0 OR B ; 4 T-states + 35: 6288+10 0D37 C2300D JP NZ,_beep_pause_l1 ; 10 T-states + 36: 6298+10 0D3A C1 POP BC **** main.asm **** - 499: 8339+10 0F05 C9 RET ; Pause complete, RETurn - 500: .include "xmodem.s" -**** include/xmodem.s **** - 1: ;------------------------------------------------------------------------- - 2: ; Z80 XMODEM implementation by Dennis Gunia - 3: ; 2022 - www,dennisgunia.de - 4: ; - 5: ; important doc: https://web.mit.edu/6.115/www/amulet/xmodem.htm - 6: ; http://www.blunk-electronic.de/train-z/pdf/xymodem.pdf - 7: ;------------------------------------------------------------------------- - 8: - 9: ;Symbols - 10: - 0001 SYM_SOH equ 0x01 - 11: - 0004 SYM_EOT equ 0x04 - 12: - 0006 SYM_ACK equ 0x06 - 13: - 0015 SYM_NAK equ 0x15 - 14: - 0017 SYM_ETB equ 0x17 - 15: - 0018 SYM_CAN equ 0x18 - 16: - 0043 SYM_C equ 0x43 - 17: - 18: ;Memory locations - 19: - 40FB MEM_VAR_BLOCK equ 0x40FB ;last block - 20: - 40FC MEM_VAR_TIMEA equ 0x40FC ;timer var (mills) - 21: - 40FE MEM_VAR_TIMER equ 0x40FE ;timer var (seconds) - 22: - 40FE MEM_INT_VEC_T equ 0x40FE ;interrupt vector table - 23: - 24: - 4400 MEM_LOC_LOAD equ 0x4400 ;load location for program - 25: - 26: ;XMODEM routine - 27: - 0F06 xmodem_init: - 28: 8349+17 0F06 CD1203 call A_RTS_OFF - 29: - 30: 8366+7 0F09 3EA7 LD A,10100111b ; Init CTC Channel 3 - 31: 8373+11 0F0B D306 OUT (CS_CTC_2),A - 32: 8384+7 0F0D 3E0E LD A,14 ; 1028.57Hz ISR - 33: 8391+11 0F0F D306 OUT (CS_CTC_2),A - 34: 8402+7 0F11 3E00 LD A,00h ; Set CTC Ch3 Interrupt Vector - 35: 8409+11 0F13 D304 OUT (CS_CTC_0),A - 36: ;load int vector to ram - 37: 8420+10 0F15 21E60F ld hl,xmodem_int ;CTC Ch3 INT routine - 38: 8430+16 0F18 220442 ld (0x4200 + 0x04),hl - 39: ;reset timer vars - 40: 8446+10 0F1B 210000 ld hl,0x0000 - 41: 8456+16 0F1E 22FC40 ld (MEM_VAR_TIMEA),hl - 42: 8472+16 0F21 22FE40 ld (MEM_VAR_TIMER),hl - 43: - 44: 8488+7 0F24 3E42 ld a,0x42 ; Set interrupt vector register - 45: 8495+9 0F26 ED47 ld i,a - 46: 8504+8 0F28 ED5E im 2 ; Z80 Interrupt mode - 47: - 48: 8512+10 0F2A 216110 ld hl,MSG_START ; Print start banner - 49: 8522+17 0F2D CDBF02 call print_str - 50: 8539+4 0F30 FB ei ; Enable interrupts - 51: ; init done. Continue with xmodem_await_conn - 52: 8543+17 0F31 CD9710 call xmodem_wait - 53: - 54: - 0F34 xmodem_await_conn: ;Wait for initial connection - 55: 8560+7 0F34 3E43 ld a, SYM_C ;Send C to notify sender, that we want CRC - 56: 8567+17 0F36 CD3710 call xmodem_out - 57: 8584+17 0F39 CD0A10 call xmodem_read_wait ;Read with timeout - 58: 8601+10 0F3C DA340F jp c, xmodem_await_conn ;Carry flag set = timeout -> repeat - 59: ;else continue - 60: - 61: - 0F3F xmodem_packet: ;XmodemCRC packet start - 62: ;use 1st byte to decide further processing - 63: 8611+7 0F3F FE04 cp SYM_EOT ;End of Transmission - 64: 8618+10 0F41 CA9D0F jp z, xmodem_packet_EOT - 65: 8628+7 0F44 FE18 cp SYM_CAN ;Cancel (Force receiver to start sending C's) - 66: 8635+10 0F46 CA340F jp z, xmodem_await_conn - 67: 8645+7 0F49 FE01 cp SYM_SOH ;Start of - 68: 8652+10 0F4B CA510F jp z, xmodem_packet_get - 69: - 70: 8662+10 0F4E C3A50F jp xmodem_err ;anything else is an error -> abort transmission - 71: - 72: - 0F51 xmodem_packet_get: ;if first byte == SYM_SOH -> receive block - 73: 8672+17 0F51 CD0A10 call xmodem_read_wait ;get byte 2 => block ID - 74: 8689+10 0F54 DA8910 jp c, xmodem_nak - 75: 8699+4 0F57 47 ld b,a - 76: 8703+13 0F58 32FB40 ld (MEM_VAR_BLOCK), a ;store block id to memory - 77: 8716+17 0F5B CD0A10 call xmodem_read_wait ;get byte 3 => block ID complement - 78: 8733+10 0F5E DA8910 jp c, xmodem_nak - 79: 8743+4 0F61 80 add b - 80: 8747+7 0F62 FEFF cp 255 ;both size infos should always sum to 255 - 81: 8754+10 0F64 C2A50F jp nz,xmodem_err ;if not 255 then its an error - 82: - 83: ;calculate block start address in RAM - 84: ;multiply by 128 - 85: ;use more efficient bit-wise operations - 86: 8764+4 0F67 3D dec a ;a-1 to remove 1 sector offset - 87: 8768+4 0F68 78 ld a,b - 88: 8772+4 0F69 1F rra ;shift 1 bit to the right - 89: 8776+7 0F6A E67F and 0x7F - 90: 8783+4 0F6C 67 ld h,a - 91: 8787+4 0F6D 78 ld a,b - 92: 8791+4 0F6E 3D dec a ;a-1 to remove 1 sector offset - 93: 8795+4 0F6F 0F rrca ;shift bit0 to bit 7 - 94: 8799+7 0F70 E680 and 0x80 ;mask out all other bits - 95: 8806+4 0F72 6F ld l,a - 96: ;result: - 97: ;hl = 0aaaaaaa a000000 - 98: - 99: 8810+10 0F73 110044 ld de,MEM_LOC_LOAD - 100: 8820+11 0F76 19 add hl,de ;add calculated offset to base address - 101: ;hl now contains the true start address of this sector - 102: - 103: 8831+7 0F77 0680 ld b,128 ;preload counter for data baytes - 104: 8838+7 0F79 0E00 ld c,0 ;packet length counter ( used for overflow error ) - 105: - 106: - 0F7B xmodem_packet_get_data: ;get 128 data bytes (loop) - 107: 8845+11 0F7B E5 push hl ;push hl onto stack because xmodem_read_wait destroys hl - 108: 8856+17 0F7C CD0A10 call xmodem_read_wait ;read byte or timeout - 109: 8873+10 0F7F DA8910 jp c, xmodem_nak ;if timeout -> nak and retry - 110: 8883+10 0F82 E1 pop hl ;restore hl - 111: 8893+7 0F83 77 ld (hl), a ;store received byte in memory - 112: 8900+6 0F84 23 inc hl ;increment pointer - 113: 8906+4 0F85 0C inc c ;increment packet length counter - 114: 8910+4 0F86 05 dec b ;decerment data bytes remmaining - 115: 8914+10 0F87 C27B0F jp nz, xmodem_packet_get_data ;if bytes remaining, loop - 116: ;else continue with crc bytes - 117: - 118: - 0F8A xmodem_packet_get_crc: ;get 16-Bit CRC - 119: 8924+17 0F8A CD0A10 call xmodem_read_wait - 120: 8941+10 0F8D DA8910 jp c, xmodem_nak - 121: 8951+4 0F90 57 ld d,a - 122: 8955+4 0F91 0C inc c - 123: 8959+17 0F92 CD0A10 call xmodem_read_wait - 124: 8976+10 0F95 DA8910 jp c, xmodem_nak - 125: 8986+4 0F98 5F ld e,a - 126: 8990+4 0F99 0C inc c - 127: ;de now contains CRC value - 128: ;check if c is not bigger than 130 byte (128 data + 2crc) - 129: ;TODO if so NACK - 130: - 131: ;de contains 16-bit CRC - 132: ;TODO if crc error NACK - 133: 8994+10 0F9A C37B10 jp xmodem_ack ;ack block -> then jump to start again - 134: - 135: - 0F9D xmodem_packet_EOT: ;End of transmission SUB. - 136: 9004+7 0F9D 3E06 ld a, SYM_ACK ;Acknowledge EOT - 137: 9011+17 0F9F CD3710 call xmodem_out - 138: 9028+10 0FA2 C3DF0F jp xmodem_end ;and end xmodem - 139: - 140: - 141: - 142: - 0FA5 xmodem_err: ;non recoverable error -> abort - 143: 9038+7 0FA5 3E18 ld a, SYM_CAN - 144: 9045+17 0FA7 CD3710 call xmodem_out - 145: 9062+7 0FAA 3E18 ld a, SYM_CAN - 146: 9069+17 0FAC CD3710 call xmodem_out - 147: 9086+7 0FAF 3E18 ld a, SYM_CAN - 148: 9093+17 0FB1 CD3710 call xmodem_out - 149: 9110+7 0FB4 3E18 ld a, SYM_CAN - 150: 9117+17 0FB6 CD3710 call xmodem_out - 151: 9134+7 0FB9 3E18 ld a, SYM_CAN - 152: 9141+17 0FBB CD3710 call xmodem_out - 153: 9158+7 0FBE 3E18 ld a, SYM_CAN - 154: 9165+17 0FC0 CD3710 call xmodem_out - 155: 9182+7 0FC3 3E18 ld a, SYM_CAN - 156: 9189+17 0FC5 CD3710 call xmodem_out - 157: 9206+7 0FC8 3E18 ld a, SYM_CAN - 158: 9213+17 0FCA CD3710 call xmodem_out - 159: 9230+7 0FCD 3E18 ld a, SYM_CAN - 160: 9237+17 0FCF CD3710 call xmodem_out - 161: 9254+7 0FD2 3E18 ld a, SYM_CAN - 162: 9261+17 0FD4 CD3710 call xmodem_out - 163: 9278+7 0FD7 3E18 ld a, SYM_CAN - 164: - 165: 9285+10 0FD9 214810 ld hl, MSG_ERROR - 166: 9295+17 0FDC CDBF02 call print_str - 167: - 168: ;overflow to end - 169: - 0FDF xmodem_end: - 170: 9312+4 0FDF F3 di ;disable interrupts - 171: 9316+17 0FE0 CDD102 call print_newLine ;print new line - 172: 9333+10 0FE3 C39900 jp PROMPT_BEGIN ;return ti prompt - 173: - 174: ;isr is used as counter for timeouts - 175: - 0FE6 xmodem_int: - 176: 9343+4 0FE6 F3 di ;setup ISR (disable further interrupts, exchange registers) - 177: 9347+4 0FE7 08 ex AF,AF' - 178: 9351+4 0FE8 D9 exx - 179: - 180: 9355+16 0FE9 2AFC40 ld hl,(MEM_VAR_TIMEA) ;millis counter - 181: 9371+6 0FEC 23 inc hl - 182: 9377+16 0FED 22FC40 ld (MEM_VAR_TIMEA),hl - 183: - 184: 9393+10 0FF0 110404 ld de,1028 ;every 1028 millis counter - 185: 9403+15 0FF3 ED52 sbc hl,de - 186: 9418+10 0FF5 C20510 jp nz, xmodem_int_cont ;if less than 1028 millis, loop - 187: - 188: 9428+10 0FF8 210000 ld hl,0 ;reset millis - 189: 9438+16 0FFB 22FC40 ld (MEM_VAR_TIMEA),hl - 190: 9454+16 0FFE 2AFE40 ld hl,(MEM_VAR_TIMER) ;incement seconds - 191: 9470+6 1001 23 inc hl - 192: 9476+16 1002 22FE40 ld (MEM_VAR_TIMER),hl - 193: - 1005 xmodem_int_cont: ;end isr - 194: 9492+4 1005 08 ex AF,AF' ;restore registers - 195: 9496+4 1006 D9 exx - 196: 9500+4 1007 FB EI ;enable interrupts - 197: 9504+14 1008 ED4D reti ;exit ISR - 198: - 199: - 200: - 201: - 202: - 203: ; A returns char - 204: ; Carry is set if timeout - 205: - 0003 xmodem_read_timeount equ 3 ;3 seconds timeout - 206: - 100A xmodem_read_wait: - 207: 9518+4 100A F3 di - 208: 9522+10 100B 210000 ld hl,0 - 209: 9532+16 100E 22FC40 ld (MEM_VAR_TIMEA),hl - 210: 9548+16 1011 22FE40 ld (MEM_VAR_TIMER),hl - 211: 9564+4 1014 FB ei - 212: 9568+17 1015 CD1B03 call A_RTS_ON - 213: - 1018 xmodem_read_wait_loop: - 214: ;check timeout - 215: 9585+16 1018 2AFE40 ld hl,(MEM_VAR_TIMER) - 216: 9601+4 101B 7D ld a, l - 217: 9605+7 101C FE03 cp xmodem_read_timeount - 218: 9612+10 101E CA3510 jp z, xmodem_read_wait_timeout ;if timeout retry - 219: - 220: ; if no timeout - 221: 9622+4 1021 AF xor a ; a = 0 - 222: 9626+11 1022 D309 out (CS_SIO_A_C), a ; select reg 0 - 223: 9637+11 1024 DB09 in a, (CS_SIO_A_C) ; read reg 0 - 224: 9648+7 1026 E601 and 1 ; mask D0 (recieve char available) - 225: 9655+10 1028 CA1810 jp Z,xmodem_read_wait_loop ; wait if no char - 226: - 227: ; if char avail - 228: 9665+11 102B DB08 in a, (CS_SIO_A_D) ; read char - 229: ;call debug_a_hex - 230: 9676+11 102D F5 push af - 231: 9687+17 102E CD1203 call A_RTS_OFF - 232: 9704+10 1031 F1 pop af - 233: 9714+4 1032 37 scf - 234: 9718+4 1033 3F ccf - 235: 9722+10 1034 C9 ret ; return - 236: - 1035 xmodem_read_wait_timeout: - 237: 9732+4 1035 37 scf - 238: 9736+10 1036 C9 ret - 239: - 240: - 241: - 1037 xmodem_out: - 242: 9746+11 1037 D308 out (CS_SIO_A_D), a - 243: 9757+17 1039 CD3D10 call xmodem_wait_out - 244: 9774+10 103C C9 ret - 245: - 246: - 103D xmodem_wait_out: - 247: 9784+4 103D 97 sub a ;clear a, write into WR0: select RR0 - 248: 9788+4 103E 3C inc a ;select RR1 - 249: 9792+11 103F D309 out (CS_SIO_A_C),A - 250: 9803+11 1041 DB09 in A,(CS_SIO_A_C) ;read RRx - 251: 9814+8 1043 CB47 bit 0,A - 252: 9822+7+5 1045 28F6 jr z,xmodem_wait_out - 253: 9829+10 1047 C9 ret - 254: - 255: - 1048 MSG_ERROR: - 256: - 1048 4572726F db "Error: unexpected byte",13,10,0 - 723A2075 - 6E657870 - 65637465 - 64206279 - 74650D0A - 00 - 257: - 258: - 1061 MSG_START: - 259: - 1061 41776169 db "Await xmodem connection",13,10,0 - 7420786D - 6F64656D - 20636F6E - 6E656374 - 696F6E0D - 0A00 - 260: - 261: - 262: - 107B xmodem_ack: ;ack routine. Only use when expecting transmission afterwards. - 263: 9839+7 107B 3E06 ld a, SYM_ACK ;send ACK - 264: 9846+17 107D CD3710 call xmodem_out - 265: 9863+17 1080 CD0A10 call xmodem_read_wait ;wait for response - 266: 9880+10 1083 DA7B10 jp c, xmodem_ack ;if timeout repeat - 267: 9890+10 1086 C33F0F jp xmodem_packet ;if received, continue with new packet - 268: - 269: - 1089 xmodem_nak: ;nak routine. Only use when expecting transmission afterwards. - 270: 9900+7 1089 3E15 ld a, SYM_NAK ;send NAK - 271: 9907+17 108B CD3710 call xmodem_out - 272: 9924+17 108E CD0A10 call xmodem_read_wait ;wait for response - 273: 9941+10 1091 DA8910 jp c, xmodem_nak ;if timeout repeat - 274: 9951+10 1094 C33F0F jp xmodem_packet ;if received, continue with new packet - 275: - 276: - 1097 xmodem_wait: - 277: 9961+10 1097 21FF00 ld hl, 0xFF - 278: 9971+10 109A 010100 ld bc, 0x01 - 279: - 109D xmodem_wait_1: - 280: 9981+4 109D 00 nop - 281: 9985+4 109E 00 nop - 282: 9989+4 109F 00 nop - 283: 9993+4 10A0 00 nop - 284: 9997+15 10A1 ED42 sbc hl,bc - 285:10012+5+6 10A3 C8 ret Z -**** main.asm **** - 501:10017+12 10A4 18F7 jr xmodem_wait_1 - 502: .include "kdrv_ide8255.s" ;include ide interface driver. + 174: 6308+10 0D3B C9 RET ; Pause complete, RETurn + 175: .include "kdrv_ide8255.s" ;include ide interface driver. **** include/kdrv_ide8255.s **** 1: ;---------------------------------------------------------------- 2: ;BIOS Driver for IDE Interface 82C55 @@ -2437,228 +1833,233 @@ 32: - 0016 IDE_REG_ALTSTS .EQU 10110b ;Alternate Status/Digital Output 33: - 0017 IDE_REG_DRVADDR .EQU 10111b ;Drive Address 34: - 35: - 36: ;================================================================ - 37: ; I/O access functions - 38: ;================================================================ + 35: - 000B IDE_REG_LBA0 .EQU 01011b ;Start sector register + 36: - 000C IDE_REG_LBA1 .EQU 01100b ;Low byte of the cylinder number + 37: - 000D IDE_REG_LBA2 .EQU 01101b ;High two bits of the cylinder number + 38: - 000E IDE_REG_LBA3 .EQU 01110b ;Head and device select register 39: - 40: ;------------------------------------------------------------------------------ - 41: ; ide_reset - 42: ; - 43: ; resets drives on bus - 44: ;------------------------------------------------------------------------------ - 45: - 10A6 ide_reset: - 46: - 47:10029+7 10A6 3E80 LD A, 10000000b ;CommandByte-A, Mode 0, PA Out, PC Out, PB Out - 48:10036+11 10A8 D333 OUT (CS_PIA_CR), A ;Set Data direction to out - 49:10047+7 10AA 3E80 LD A, IDE_RST - 50:10054+11 10AC D332 OUT (CS_PIA_PC), A ;Reset IDE Device - 51:10065+4 10AE 00 NOP - 52:10069+4 10AF AF XOR A - 53:10073+11 10B0 D332 OUT (CS_PIA_PC), A ;end device reset - 54:10084+10 10B2 C9 RET - 55: - 56: - 57: ;------------------------------------------------------------------------------ - 58: ; ide_regwrite_8 - 59: ; - 60: ; Sends data to the IDE device - 61: ; A contains DATA - 62: ; B contains register number - 63: ;------------------------------------------------------------------------------ - 64: - 10B3 ide_regwrite_8: - 65:10094+11 10B3 F5 PUSH AF ;store date to stack - 66: ; Prepare PIA Data Direction - 67:10105+7 10B4 3E80 LD A, 10000000b ;CommandByte-A, Mode 0, PA Out, PC Out, PB Out - 68:10112+11 10B6 D333 OUT (CS_PIA_CR), A ;Set Data direction to out - 69: ; Write Data out - 70:10123+10 10B8 F1 POP AF - 71:10133+11 10B9 D330 OUT (CS_PIA_PA), A ;Write Data to bit 0-7 - 72: ;Prepare Address - 73:10144+4 10BB 78 LD A, B ;Load register address - 74:10148+7 10BC E61F AND 00011111b ;Mask unused bits - 75:10155+11 10BE D332 OUT (CS_PIA_PC), A ;Write Data to bit controll lines - 76:10166+7 10C0 F620 OR IDE_WR ;Set Write bit - 77:10173+11 10C2 D332 OUT (CS_PIA_PC), A ;Set write signal - 78:10184+4 10C4 00 NOP ;delay to wait for processing - 79:10188+4 10C5 78 LD A, B ;Load register address - 80:10192+7 10C6 E61F AND 00011111b ;Mask unused bits - 81:10199+11 10C8 D332 OUT (CS_PIA_PC), A ;disable write signal - 82:10210+4 10CA 00 NOP - 83:10214+4 10CB AF XOR A ;clear register A - 84:10218+11 10CC D332 OUT (CS_PIA_PC), A ;clear controll lines - 85:10229+10 10CE C9 RET - 86: - 87: - 88: ;------------------------------------------------------------------------------ - 89: ; ide_regread_8 - 90: ; - 91: ; Sends data to the IDE device - 92: ; B contains register number - 93: ; A returns data - 94: ;------------------------------------------------------------------------------ - 95: - 10CF ide_regread_8: - 96:10239+7 10CF 3E92 LD A, 10010010b ;CommandByte-A, Mode 0, PA IN, PC Out, PB IN - 97:10246+11 10D1 D333 OUT (CS_PIA_CR), A ;Set Data direction to in - 98: ;Prepare Address - 99:10257+4 10D3 78 LD A, B ;Load register address - 100:10261+7 10D4 E61F AND 00011111b ;Mask unused bits - 101:10268+11 10D6 D332 OUT (CS_PIA_PC), A ;Write Data to bit controll lines - 102:10279+7 10D8 F640 OR IDE_RD ;Set Write bit - 103:10286+11 10DA D332 OUT (CS_PIA_PC), A ;Write Data to bit controll lines - 104:10297+4 10DC 00 NOP ;delay to wait for processing - 105:10301+11 10DD F5 PUSH AF - 106:10312+10 10DE F1 POP AF - 107:10322+11 10DF F5 PUSH AF - 108:10333+10 10E0 F1 POP AF - 109:10343+11 10E1 F5 PUSH AF - 110:10354+10 10E2 F1 POP AF - 111:10364+11 10E3 F5 PUSH AF - 112:10375+10 10E4 F1 POP AF - 113:10385+11 10E5 DB30 IN A,(CS_PIA_PA) ;read data from ide device to b (because a is used later) - 114:10396+11 10E7 F5 PUSH AF - 115:10407+4 10E8 AF XOR A ;clear register A - 116:10411+11 10E9 D332 OUT (CS_PIA_PC), A ;clear controll lines - 117:10422+10 10EB F1 POP AF ;put data in accumulator - 118:10432+10 10EC C9 RET - 119: - 120: - 121: ;------------------------------------------------------------------------------ - 122: ; ide_readsector_256 - 123: ; - 124: ; Reads IDE Data - 125: ; HL contains destination address + 40: + 41: ;================================================================ + 42: ; I/O access functions + 43: ;================================================================ + 44: + 45: ;------------------------------------------------------------------------------ + 46: ; ide_reset + 47: ; + 48: ; resets drives on bus + 49: ;------------------------------------------------------------------------------ + 50: - 0D3C ide_reset: + 51: + 52: 6318+7 0D3C 3E80 LD A, 10000000b ;CommandByte-A, Mode 0, PA Out, PC Out, PB Out + 53: 6325+11 0D3E D333 OUT (CS_PIA_CR), A ;Set Data direction to out + 54: 6336+7 0D40 3E80 LD A, IDE_RST + 55: 6343+11 0D42 D332 OUT (CS_PIA_PC), A ;Reset IDE Device + 56: 6354+4 0D44 00 NOP + 57: 6358+4 0D45 AF XOR A + 58: 6362+11 0D46 D332 OUT (CS_PIA_PC), A ;end device reset + 59: 6373+10 0D48 C9 RET + 60: + 61: + 62: ;------------------------------------------------------------------------------ + 63: ; ide_regwrite_8 + 64: ; + 65: ; Sends data to the IDE device + 66: ; A contains DATA + 67: ; B contains register number + 68: ;------------------------------------------------------------------------------ + 69: - 0D49 ide_regwrite_8: + 70: 6383+11 0D49 F5 PUSH AF ;store date to stack + 71: ; Prepare PIA Data Direction + 72: 6394+7 0D4A 3E80 LD A, 10000000b ;CommandByte-A, Mode 0, PA Out, PC Out, PB Out + 73: 6401+11 0D4C D333 OUT (CS_PIA_CR), A ;Set Data direction to out + 74: ; Write Data out + 75: 6412+10 0D4E F1 POP AF + 76: 6422+11 0D4F D330 OUT (CS_PIA_PA), A ;Write Data to bit 0-7 + 77: ;Prepare Address + 78: 6433+4 0D51 78 LD A, B ;Load register address + 79: 6437+7 0D52 E61F AND 00011111b ;Mask unused bits + 80: 6444+11 0D54 D332 OUT (CS_PIA_PC), A ;Write Data to bit controll lines + 81: 6455+7 0D56 F620 OR IDE_WR ;Set Write bit + 82: 6462+11 0D58 D332 OUT (CS_PIA_PC), A ;Set write signal + 83: 6473+4 0D5A 00 NOP ;delay to wait for processing + 84: 6477+4 0D5B 78 LD A, B ;Load register address + 85: 6481+7 0D5C E61F AND 00011111b ;Mask unused bits + 86: 6488+11 0D5E D332 OUT (CS_PIA_PC), A ;disable write signal + 87: 6499+4 0D60 00 NOP + 88: 6503+4 0D61 AF XOR A ;clear register A + 89: 6507+11 0D62 D332 OUT (CS_PIA_PC), A ;clear controll lines + 90: 6518+10 0D64 C9 RET + 91: + 92: + 93: ;------------------------------------------------------------------------------ + 94: ; ide_regread_8 + 95: ; + 96: ; Sends data to the IDE device + 97: ; B contains register number + 98: ; A returns data + 99: ;------------------------------------------------------------------------------ + 100: - 0D65 ide_regread_8: + 101: 6528+7 0D65 3E92 LD A, 10010010b ;CommandByte-A, Mode 0, PA IN, PC Out, PB IN + 102: 6535+11 0D67 D333 OUT (CS_PIA_CR), A ;Set Data direction to in + 103: ;Prepare Address + 104: 6546+4 0D69 78 LD A, B ;Load register address + 105: 6550+7 0D6A E61F AND 00011111b ;Mask unused bits + 106: 6557+11 0D6C D332 OUT (CS_PIA_PC), A ;Write Data to bit controll lines + 107: 6568+7 0D6E F640 OR IDE_RD ;Set Write bit + 108: 6575+11 0D70 D332 OUT (CS_PIA_PC), A ;Write Data to bit controll lines + 109: 6586+4 0D72 00 NOP ;delay to wait for processing + 110: 6590+11 0D73 F5 PUSH AF + 111: 6601+10 0D74 F1 POP AF + 112: 6611+11 0D75 F5 PUSH AF + 113: 6622+10 0D76 F1 POP AF + 114: 6632+11 0D77 F5 PUSH AF + 115: 6643+10 0D78 F1 POP AF + 116: 6653+11 0D79 F5 PUSH AF + 117: 6664+10 0D7A F1 POP AF + 118: 6674+11 0D7B DB30 IN A,(CS_PIA_PA) ;read data from ide device to b (because a is used later) + 119: 6685+11 0D7D F5 PUSH AF + 120: 6696+4 0D7E AF XOR A ;clear register A + 121: 6700+11 0D7F D332 OUT (CS_PIA_PC), A ;clear controll lines + 122: 6711+10 0D81 F1 POP AF ;put data in accumulator + 123: 6721+10 0D82 C9 RET + 124: + 125: 126: ;------------------------------------------------------------------------------ - 127: - 10ED ide_readsector_256: - 128:10442+7 10ED 0EFF LD C,255 ;Setup counter for 256 words - 129: - 130: - 10EF ide_readsector_256_waitloop: - 131:10449+7 10EF 060F LD B, IDE_REG_CMDSTS - 132:10456+17 10F1 CDCF10 CALL ide_regread_8 - 133:10473+8 10F4 CB47 BIT 0,a ;Error Bit set. - 134:10481+10 10F6 C26E11 JP NZ, ide_printerror - 135:10491+8 10F9 CB5F BIT 3,a ;DRQ Bit set. If set, disk has data - 136:10499+7+5 10FB 28F2 JR Z, ide_readsector_256_waitloop ;If not set, wait - 137: - 138:10506+7 10FD 3E92 LD A, 10010010b ;CommandByte-A, Mode 0, PA IN, PC Out, PB IN - 139:10513+11 10FF D333 OUT (CS_PIA_CR), A ;Set Data direction to IN - 140:10524+7 1101 3E08 LD A, IDE_REG_DATA ;CS0 and A=0 -> I/O register - 141:10531+11 1103 D332 OUT (CS_PIA_PC), A ;set register - 142:10542+7 1105 F640 OR IDE_RD ;Set Read bit - 143:10549+11 1107 D332 OUT (CS_PIA_PC), A ;Write Read to bit controll lines - 144:10560+4 1109 00 NOP - 145:10564+4 110A 00 NOP - 146:10568+4 110B 00 NOP - 147:10572+11 110C DB31 IN A,(CS_PIA_PB) ;Load 16-Bit data to buffer - 148:10583+7 110E 77 LD (HL), A - 149:10590+6 110F 23 INC HL - 150:10596+11 1110 DB30 IN A,(CS_PIA_PA) - 151:10607+7 1112 77 LD (HL), A - 152:10614+6 1113 23 INC HL - 153: - 154:10620+4 1114 79 LD A,C - 155:10624+4 1115 B7 OR A - 156:10628+10 1116 CA1C11 JP Z,ide_readsector_256_done - 157:10638+4 1119 0D DEC C - 158:10642+12 111A 18D3 JR ide_readsector_256_waitloop - 159: - 160: - 111C ide_readsector_256_done: - 161:10654+10 111C C9 RET - 162: - 163: - 111D ide_readsector_512_inv: - 164:10664+7 111D 0EFF LD C,255 ;Setup counter for 256 words - 165:10671+10 111F 110010 LD DE, 4096 ;Timeout counter - 166: - 1122 ide_readsector_512_inv_waitloop: - 167:10681+6 1122 1B DEC DE - 168:10687+4 1123 7A LD A,D - 169:10691+4 1124 B3 OR E - 170:10695+10 1125 CA5811 JP Z, ide_readsector_timeout - 171:10705+7 1128 060F LD B, IDE_REG_CMDSTS - 172:10712+17 112A CDCF10 CALL ide_regread_8 - 173:10729+8 112D CB47 BIT 0,a ;Error Bit set. - 174:10737+10 112F C26E11 JP NZ, ide_printerror - 175:10747+8 1132 CB5F BIT 3,a ;DRQ Bit set. If set, disk has data - 176:10755+7+5 1134 28EC JR Z, ide_readsector_512_inv_waitloop ;If not set, wait - 177:10762+10 1136 110008 LD DE, 2048 ;Timeout counter - 178:10772+7 1139 3E92 LD A, 10010010b ;CommandByte-A, Mode 0, PA IN, PC Out, PB IN - 179:10779+11 113B D333 OUT (CS_PIA_CR), A ;Set Data direction to IN - 180:10790+7 113D 3E08 LD A, IDE_REG_DATA ;CS0 and A=0 -> I/O register - 181:10797+11 113F D332 OUT (CS_PIA_PC), A ;set register - 182:10808+7 1141 F640 OR IDE_RD ;Set Read bit - 183:10815+11 1143 D332 OUT (CS_PIA_PC), A ;Write Read to bit controll lines - 184:10826+4 1145 00 NOP - 185:10830+4 1146 00 NOP - 186:10834+4 1147 00 NOP - 187:10838+11 1148 DB30 IN A,(CS_PIA_PA) ;Load 16-Bit data to buffer - 188:10849+7 114A 77 LD (HL), A - 189:10856+6 114B 23 INC HL - 190:10862+11 114C DB31 IN A,(CS_PIA_PB) - 191:10873+7 114E 77 LD (HL), A - 192:10880+6 114F 23 INC HL - 193: - 194:10886+4 1150 79 LD A,C - 195:10890+4 1151 B7 OR A - 196:10894+10 1152 CA1C11 JP Z,ide_readsector_256_done - 197:10904+4 1155 0D DEC C - 198:10908+12 1156 18CA JR ide_readsector_512_inv_waitloop - 199: - 200: - 1158 ide_readsector_timeout: - 201:10920+10 1158 21D011 LD HL, [str_error_time] - 202:10930+17 115B CDBF02 CALL print_str - 203:10947+4 115E 79 LD A, C - 204:10951+17 115F CDE702 CALL print_a_hex - 205:10968+7 1162 3E0A LD A,10 - 206:10975+17 1164 CDB702 CALL print_char - 207:10992+7 1167 3E0D LD A,13 - 208:10999+17 1169 CDB702 CALL print_char - 209:11016+10 116C C9 RET - 210: - 211: - 212: - 213: - 214: ;------------------------------------------------------------------------------ - 215: ; ide_writesector_256 - 216: ; - 217: ; Writes 512 bytes (256 words) of IDE Data - 218: ; HL contains data start address + 127: ; ide_readsector_256 + 128: ; + 129: ; Reads IDE Data + 130: ; HL contains destination address + 131: ;------------------------------------------------------------------------------ + 132: - 0D83 ide_readsector_256: + 133: 6731+7 0D83 0EFF LD C,255 ;Setup counter for 256 words + 134: + 135: - 0D85 ide_readsector_256_waitloop: + 136: 6738+7 0D85 060F LD B, IDE_REG_CMDSTS + 137: 6745+17 0D87 CD650D CALL ide_regread_8 + 138: 6762+8 0D8A CB47 BIT 0,a ;Error Bit set. + 139: 6770+10 0D8C C2040E JP NZ, ide_printerror + 140: 6780+8 0D8F CB5F BIT 3,a ;DRQ Bit set. If set, disk has data + 141: 6788+7+5 0D91 28F2 JR Z, ide_readsector_256_waitloop ;If not set, wait + 142: + 143: 6795+7 0D93 3E92 LD A, 10010010b ;CommandByte-A, Mode 0, PA IN, PC Out, PB IN + 144: 6802+11 0D95 D333 OUT (CS_PIA_CR), A ;Set Data direction to IN + 145: 6813+7 0D97 3E08 LD A, IDE_REG_DATA ;CS0 and A=0 -> I/O register + 146: 6820+11 0D99 D332 OUT (CS_PIA_PC), A ;set register + 147: 6831+7 0D9B F640 OR IDE_RD ;Set Read bit + 148: 6838+11 0D9D D332 OUT (CS_PIA_PC), A ;Write Read to bit controll lines + 149: 6849+4 0D9F 00 NOP + 150: 6853+4 0DA0 00 NOP + 151: 6857+4 0DA1 00 NOP + 152: 6861+11 0DA2 DB31 IN A,(CS_PIA_PB) ;Load 16-Bit data to buffer + 153: 6872+7 0DA4 77 LD (HL), A + 154: 6879+6 0DA5 23 INC HL + 155: 6885+11 0DA6 DB30 IN A,(CS_PIA_PA) + 156: 6896+7 0DA8 77 LD (HL), A + 157: 6903+6 0DA9 23 INC HL + 158: + 159: 6909+4 0DAA 79 LD A,C + 160: 6913+4 0DAB B7 OR A + 161: 6917+10 0DAC CAB20D JP Z,ide_readsector_256_done + 162: 6927+4 0DAF 0D DEC C + 163: 6931+12 0DB0 18D3 JR ide_readsector_256_waitloop + 164: + 165: - 0DB2 ide_readsector_256_done: + 166: 6943+10 0DB2 C9 RET + 167: + 168: - 0DB3 ide_readsector_512_inv: + 169: 6953+7 0DB3 0EFF LD C,255 ;Setup counter for 256 words + 170: 6960+10 0DB5 110010 LD DE, 4096 ;Timeout counter + 171: - 0DB8 ide_readsector_512_inv_waitloop: + 172: 6970+6 0DB8 1B DEC DE + 173: 6976+4 0DB9 7A LD A,D + 174: 6980+4 0DBA B3 OR E + 175: 6984+10 0DBB CAEE0D JP Z, ide_readsector_timeout + 176: 6994+7 0DBE 060F LD B, IDE_REG_CMDSTS + 177: 7001+17 0DC0 CD650D CALL ide_regread_8 + 178: 7018+8 0DC3 CB47 BIT 0,a ;Error Bit set. + 179: 7026+10 0DC5 C2040E JP NZ, ide_printerror + 180: 7036+8 0DC8 CB5F BIT 3,a ;DRQ Bit set. If set, disk has data + 181: 7044+7+5 0DCA 28EC JR Z, ide_readsector_512_inv_waitloop ;If not set, wait + 182: 7051+10 0DCC 110008 LD DE, 2048 ;Timeout counter + 183: 7061+7 0DCF 3E92 LD A, 10010010b ;CommandByte-A, Mode 0, PA IN, PC Out, PB IN + 184: 7068+11 0DD1 D333 OUT (CS_PIA_CR), A ;Set Data direction to IN + 185: 7079+7 0DD3 3E08 LD A, IDE_REG_DATA ;CS0 and A=0 -> I/O register + 186: 7086+11 0DD5 D332 OUT (CS_PIA_PC), A ;set register + 187: 7097+7 0DD7 F640 OR IDE_RD ;Set Read bit + 188: 7104+11 0DD9 D332 OUT (CS_PIA_PC), A ;Write Read to bit controll lines + 189: 7115+4 0DDB 00 NOP + 190: 7119+4 0DDC 00 NOP + 191: 7123+4 0DDD 00 NOP + 192: 7127+11 0DDE DB30 IN A,(CS_PIA_PA) ;Load 16-Bit data to buffer + 193: 7138+7 0DE0 77 LD (HL), A + 194: 7145+6 0DE1 23 INC HL + 195: 7151+11 0DE2 DB31 IN A,(CS_PIA_PB) + 196: 7162+7 0DE4 77 LD (HL), A + 197: 7169+6 0DE5 23 INC HL + 198: + 199: 7175+4 0DE6 79 LD A,C + 200: 7179+4 0DE7 B7 OR A + 201: 7183+10 0DE8 CAB20D JP Z,ide_readsector_256_done + 202: 7193+4 0DEB 0D DEC C + 203: 7197+12 0DEC 18CA JR ide_readsector_512_inv_waitloop + 204: + 205: - 0DEE ide_readsector_timeout: + 206: 7209+10 0DEE 21660E LD HL, [str_error_time] + 207: 7219+17 0DF1 CDDF00 CALL print_str + 208: 7236+4 0DF4 79 LD A, C + 209: 7240+17 0DF5 CD0701 CALL print_a_hex + 210: 7257+7 0DF8 3E0A LD A,10 + 211: 7264+17 0DFA CDD700 CALL print_char + 212: 7281+7 0DFD 3E0D LD A,13 + 213: 7288+17 0DFF CDD700 CALL print_char + 214: 7305+10 0E02 C9 RET + 215: + 216: + 217: + 218: 219: ;------------------------------------------------------------------------------ - 220: - 116D ide_writesector_256: - 221:11026+10 116D C9 RET ;NOT IMPLEMENTED - 222: - 223: - 224: ;================================================================ - 225: ; utility functions - 226: ;================================================================ + 220: ; ide_writesector_256 + 221: ; + 222: ; Writes 512 bytes (256 words) of IDE Data + 223: ; HL contains data start address + 224: ;------------------------------------------------------------------------------ + 225: - 0E03 ide_writesector_256: + 226: 7315+10 0E03 C9 RET ;NOT IMPLEMENTED 227: - 228: ;------------------------------------------------------------------------------ - 229: ; ide_printerror - 230: ; - 231: ; prints IDE error to console - 232: ;------------------------------------------------------------------------------ - 233: - 116E ide_printerror: - 234:11036+10 116E 21A111 LD HL, [str_error_start] - 235:11046+17 1171 CDBF02 CALL print_str - 236:11063+7 1174 060F LD B, IDE_REG_CMDSTS - 237:11070+17 1176 CDCF10 CALL ide_regread_8 - 238:11087+17 1179 CDE702 CALL print_a_hex - 239:11104+10 117C 21BE11 LD HL, [str_error_start1] - 240:11114+17 117F CDBF02 CALL print_str - 241:11131+13 1182 3A0050 LD A,(MEM_IDE_DEVICE) - 242:11144+17 1185 CDE702 CALL print_a_hex - 243:11161+10 1188 21C711 LD HL, [str_error_start2] - 244:11171+17 118B CDBF02 CALL print_str - 245:11188+7 118E 0609 LD B, IDE_REG_ERROR - 246:11195+17 1190 CDCF10 CALL ide_regread_8 - 247:11212+17 1193 CDE702 CALL print_a_hex - 248:11229+7 1196 3E0A LD A,10 - 249:11236+17 1198 CDB702 CALL print_char - 250:11253+7 119B 3E0D LD A,13 - 251:11260+17 119D CDB702 CALL print_char - 252: - 253:11277+10 11A0 C9 RET - 254: - 255: - 11A1 str_error_start: - 256: - 11A1 0D0A4469 db 13,10,"Disk I/O error. Status: 0x",0 + 228: + 229: ;================================================================ + 230: ; utility functions + 231: ;================================================================ + 232: + 233: ;------------------------------------------------------------------------------ + 234: ; ide_printerror + 235: ; + 236: ; prints IDE error to console + 237: ;------------------------------------------------------------------------------ + 238: - 0E04 ide_printerror: + 239: 7325+10 0E04 21370E LD HL, [str_error_start] + 240: 7335+17 0E07 CDDF00 CALL print_str + 241: 7352+7 0E0A 060F LD B, IDE_REG_CMDSTS + 242: 7359+17 0E0C CD650D CALL ide_regread_8 + 243: 7376+17 0E0F CD0701 CALL print_a_hex + 244: 7393+10 0E12 21540E LD HL, [str_error_start1] + 245: 7403+17 0E15 CDDF00 CALL print_str + 246: 7420+13 0E18 3A2C40 LD A,(MEM_IDE_DEVICE) + 247: 7433+17 0E1B CD0701 CALL print_a_hex + 248: 7450+10 0E1E 215D0E LD HL, [str_error_start2] + 249: 7460+17 0E21 CDDF00 CALL print_str + 250: 7477+7 0E24 0609 LD B, IDE_REG_ERROR + 251: 7484+17 0E26 CD650D CALL ide_regread_8 + 252: 7501+17 0E29 CD0701 CALL print_a_hex + 253: 7518+7 0E2C 3E0A LD A,10 + 254: 7525+17 0E2E CDD700 CALL print_char + 255: 7542+7 0E31 3E0D LD A,13 + 256: 7549+17 0E33 CDD700 CALL print_char + 257: + 258: 7566+10 0E36 C9 RET + 259: + 260: - 0E37 str_error_start: + 261: - 0E37 0D0A4469 db 13,10,"Disk I/O error. Status: 0x",0 736B2049 2F4F2065 72726F72 @@ -2666,17 +2067,17 @@ 61747573 3A203078 00 - 257: - 11BE str_error_start1: - 258: - 11BE 20446576 db " Dev: 0x",0 + 262: - 0E54 str_error_start1: + 263: - 0E54 20446576 db " Dev: 0x",0 3A203078 00 - 259: - 11C7 str_error_start2: - 260: - 11C7 20457272 db " Err: 0x",0 + 264: - 0E5D str_error_start2: + 265: - 0E5D 20457272 db " Err: 0x",0 3A203078 00 - 261: - 262: - 11D0 str_error_time: - 263: - 11D0 0D0A4469 db 13,10,"Disk I/O error. Data timeout @ 0x",0 + 266: + 267: - 0E66 str_error_time: + 268: - 0E66 0D0A4469 db 13,10,"Disk I/O error. Data timeout @ 0x",0 736B2049 2F4F2065 72726F72 @@ -2686,7 +2087,7 @@ 75742040 20307800 **** main.asm **** - 503: .include "kdrv_ideif.s" ;include ide driver. + 176: .include "kdrv_ideif.s" ;include ide driver. **** include/kdrv_ideif.s **** 1: ;---------------------------------------------------------------- 2: ;BIOS Driver for IDE Access @@ -2702,138 +2103,776 @@ 12: ;================================================================ 13: ; IDE Variables 14: ;================================================================ - 15: - 5000 MEM_IDE_BASE .EQU 0x5000 - 16: - 5000 MEM_IDE_DEVICE .EQU MEM_IDE_BASE - 17: - 5001 MEM_IDE_STATUS .EQU MEM_IDE_BASE + 1 ;1Byte: 0x00 if status is okay - 18: - 19: - 5002 MEM_IDE_PARTITION .EQU MEM_IDE_BASE + 2 ;4*16Bytes: LBA first sector - 20: - 5006 MEM_IDE_POINTER .EQU MEM_IDE_BASE + 6 ;4*16Bytes: LBA first sector - 21: - 22: - 5041 MEM_IDE_BUFFER .EQU MEM_IDE_BASE + 65 ;512Byte: buffer for read/write data - 23: - 24: ;================================================================ - 25: ; IDE funtions - 26: ;================================================================ - 27: - 28: ;------------------------------------------------------------------------------ - 29: ; ideif_init_drive - 30: ; - 31: ; initializes drive - 32: ;------------------------------------------------------------------------------ - 33: - 11F4 ideif_init_drive: - 34:11287+4 11F4 AF xor a - 35:11291+13 11F5 320050 ld (MEM_IDE_DEVICE),A ;Set device to 0 - 36:11304+13 11F8 320150 ld (MEM_IDE_STATUS),A ;Set status to 0 (OK) - 37:11317+4 11FB F3 di ;disable interrupt - 38:11321+17 11FC CDA610 call ide_reset ;Reset drives on bus - 39:11338+10 11FF 218912 ld hl, [str_dev_waitready] - 40:11348+17 1202 CDBF02 call print_str ;print waiting message - 41:11365+10 1205 11FF1F ld DE, 0x1FFF ;preload timeout counter - 42: - 1208 ideif_init_drive_loop1: - 43:11375+7 1208 060F ld b, IDE_REG_CMDSTS - 44:11382+17 120A CDCF10 call ide_regread_8 ;read drive status register - 45:11399+4 120D B7 OR A - 46:11403+7+5 120E 280B JR Z, ideif_init_drive_nodrv ;no drive found - 47:11410+8 1210 CB77 BIT 6,A ;Wait for device ready - 48:11418+7+5 1212 200E JR NZ, ideif_init_drive_detected - 49:11425+6 1214 1B DEC DE ; decrement timeout - 50:11431+4 1215 7A LD A,D - 51:11435+4 1216 B3 OR E - 52:11439+7+5 1217 2802 JR Z, ideif_init_drive_nodrv - 53:11446+12 1219 18ED JR ideif_init_drive_loop1 - 54: - 55: - 121B ideif_init_drive_nodrv: - 56:11458+10 121B 21B312 ld hl, [str_dev_notfound] - 57:11468+17 121E CDBF02 call print_str - 58:11485+10 1221 C9 RET + 15: - 402C phase var_idebuffer + 16: - 402C MEM_IDE_DEVICE: + 17: - 402C ..402C 00 defs 1 + 18: - 402D MEM_IDE_STATUS: + 19: - 402D ..402D 00 defs 1 ;1Byte: 0x00 if status is okay + 20: - 402E MEM_IDE_PARTITION: + 21: - 402E ..4031 00 defs 4 ;4*16Bytes: LBA first sector + 22: - 4032 MEM_IDE_POINTER: + 23: - 4032 ..4035 00 defs 4 ;4*16Bytes: LBA first sector + 24: - 4036 MEM_IDE_DEV_TABLE: + 25: - 4036 ..4075 00 defs 16*4 + 26: - 4076 MEM_IDE_SELECTED: + 27: - 4076 ..4076 00 defs 1 + 28: - 4077 MEM_IDE_STRING_0: + 29: - 4077 ..409E 00 defs 40 + 30: - 409F MEM_IDE_STRING_1: + 31: - 409F ..40C6 00 defs 40 + 32: - 40C7 MEM_IDE_STRING_2: + 33: - 40C7 ..40EE 00 defs 40 + 34: - 40EF MEM_IDE_STRING_3: + 35: - 40EF ..4116 00 defs 40 + 36: - 4117 MEM_IDE_BUFFER: + 37: - 4117 ..4316 00 defs 512 + 38: - 4317 MEM_IDE_FSBUFFER: + 39: - 4317 ..4416 00 defs 256 + 40: - 1275 dephase + 41: ;DEV-Table layout + 42: ; 0x00 0x00 + 43: ;Status: 0x00 -> Ready + 44: ; 0x01 -> Not found + 45: ; 0x02 -> No supported filesystem + 46: ;I/O Addr: Base addr of 82C55 + 47: ;Type: File system type + 48: + 49: + 50: - 1275 IDE_DEV_TABLE: + 51: - 1275 FF000000 db 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, [MEM_IDE_STRING_0], [MEM_IDE_STRING_0]>>8, 0x00, 0x00 + 00000000 + 00003000 + 77400000 + 52: - 1285 FF000000 db 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x01, [MEM_IDE_STRING_1], [MEM_IDE_STRING_1]>>8, 0x00, 0x00 + 00000000 + 00003001 + 9F400000 + 53: - 1295 FF000000 db 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, [MEM_IDE_STRING_2], [MEM_IDE_STRING_2]>>8, 0x00, 0x00 + 00000000 + 00004000 + C7400000 + 54: - 12A5 FF000000 db 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, [MEM_IDE_STRING_3], [MEM_IDE_STRING_3]>>8, 0x00, 0x00 + 00000000 + 00004001 + EF400000 + 55: + 56: ;================================================================ + 57: ; IDE funtions + 58: ;================================================================ 59: - 60: - 1222 ideif_init_drive_detected: - 61:11495+10 1222 219D12 ld hl, [str_dev_ready] - 62:11505+17 1225 CDBF02 call print_str - 63:11522+7 1228 060F LD B, IDE_REG_CMDSTS ;Get drive identification - 64:11529+7 122A 3EEC LD A, IDE_CMD_IDENT - 65:11536+17 122C CDB310 call ide_regwrite_8 ;Write command to drive - 66:11553+10 122F 214150 LD HL,MEM_IDE_BUFFER ;set read/write buffer start address - 67:11563+17 1232 CDED10 call ide_readsector_256 ;read 256 words from device - 68:11580+10 1235 215550 LD HL,MEM_IDE_BUFFER + 20 ;print device serial - 69:11590+7 1238 0614 LD B, 20 - 70:11597+17 123A CD5813 CALL print_str_fixed - 71:11614+10 123D 21AA12 ld hl, [str_dev_ready2] - 72:11624+17 1240 CDBF02 call print_str - 73:11641+10 1243 217750 LD HL,MEM_IDE_BUFFER + 54 ;print device name - 74:11651+7 1246 0628 LD B, 40 - 75:11658+17 1248 CD5813 CALL print_str_fixed - 76:11675+7 124B 3E0A LD A,10 ;New line - 77:11682+17 124D CDB702 CALL print_char - 78:11699+7 1250 3E0D LD A,13 - 79:11706+17 1252 CDB702 CALL print_char - 80:11723+10 1255 C9 RET + 60: ;------------------------------------------------------------------------------ + 61: ; ideif_init_table + 62: ; + 63: ; initializes drive table + 64: ;------------------------------------------------------------------------------ + 65: - 12B5 ideif_init_devtable: + 66: ;copy default values to ram + 67: 7576+10 12B5 217512 ld hl,[IDE_DEV_TABLE] + 68: 7586+10 12B8 113640 ld de,[MEM_IDE_DEV_TABLE] + 69: 7596+10 12BB 014000 ld bc,16*4 + 70: 7606+16+5 12BE EDB0 ldir + 71: ;set selected device + 72: 7622+7 12C0 3E00 ld a,0 + 73: 7629+13 12C2 327640 ld (MEM_IDE_SELECTED),a + 74: ;set empty names + 75: 7642+4 12C5 AF xor a + 76: 7646+13 12C6 327740 ld (MEM_IDE_STRING_0),a + 77: 7659+13 12C9 329F40 ld (MEM_IDE_STRING_1),a + 78: 7672+13 12CC 32C740 ld (MEM_IDE_STRING_2),a + 79: 7685+13 12CF 32EF40 ld (MEM_IDE_STRING_3),a + 80: 7698+10 12D2 C9 ret 81: 82: ;------------------------------------------------------------------------------ - 83: ; read_lba_sector + 83: ; ideif_prnt_devtable 84: ; - 85: ; Reads A*512 byte sector into memory - 86: ; HL contains pointer to LBA address - 87: ; A contains sector count - 88: ;------------------------------------------------------------------------------ - 89: - 1256 read_lba_sector: - 90:11733+7 1256 060A LD B,IDE_REG_SECTOR ;amount of sectores - 91:11740+17 1258 CDB310 CALL ide_regwrite_8 - 92: - 93:11757+7 125B 7E LD A,(HL) - 94:11764+7 125C E60F AND 00001111b - 95:11771+7 125E F6E0 OR 11100000b - 96:11778+7 1260 060E LD B,IDE_REG_HEAD - 97:11785+17 1262 CDB310 CALL ide_regwrite_8 - 98:11802+6 1265 23 INC HL - 99:11808+7 1266 7E LD A,(HL) - 100:11815+7 1267 060D LD B,IDE_REG_HCYL - 101:11822+17 1269 CDB310 CALL ide_regwrite_8 - 102:11839+6 126C 23 INC HL - 103:11845+7 126D 7E LD A,(HL) - 104:11852+7 126E 060C LD B,IDE_REG_LCYL - 105:11859+17 1270 CDB310 CALL ide_regwrite_8 - 106:11876+6 1273 23 INC HL - 107:11882+7 1274 7E LD A,(HL) - 108:11889+7 1275 060B LD B,IDE_REG_SSECTOR - 109:11896+17 1277 CDB310 CALL ide_regwrite_8 - 110:11913+6 127A 23 INC HL - 111: - 112:11919+7 127B 3E20 LD A,IDE_CMD_READSEC ;send read command - 113:11926+7 127D 060F LD B,IDE_REG_CMDSTS - 114:11933+17 127F CDB310 CALL ide_regwrite_8 - 115:11950+10 1282 214150 LD HL,MEM_IDE_BUFFER ;set read/write buffer start address - 116:11960+17 1285 CD1D11 call ide_readsector_512_inv ;read 256 words from device - 117:11977+10 1288 C9 ret - 118: - 119: - 120: ;================================================================ - 121: ; IDE strings - 122: ;=============================================================== - 123: - 124: - 1289 str_dev_waitready: - 125: - 1289 0D0A4465 db 13,10,"Detecting drives ",0 + 85: ; prints drive table + 86: ;------------------------------------------------------------------------------ + 87: - 12D3 ideif_prnt_devtable: + 88: 7708+17 12D3 CDF100 call print_newLine + 89: 7725+10 12D6 211015 ld hl,[_ideif_prnt_devtable_hdr] + 90: 7735+17 12D9 CDDF00 call print_str + 91: 7752+10 12DC 213640 ld hl,[MEM_IDE_DEV_TABLE] + 92: 7762+7 12DF 0600 ld b,0 ;device number + 93: - 12E1 _ideif_prnt_devtable_l1: ;loop 1 -> for each device + 94: ;print if selected + 95: 7769+13 12E1 3A7640 ld a,(MEM_IDE_SELECTED) + 96: 7782+4 12E4 B8 cp b + 97: 7786+10 12E5 CAEC12 jp z,_ideif_prnt_devtable_l1_sel + 98: 7796+7 12E8 3E20 ld a, ' ' + 99: 7803+12 12EA 1802 jr _ideif_prnt_devtable_l1_nxt + 100: - 12EC _ideif_prnt_devtable_l1_sel: + 101: 7815+7 12EC 3E2A ld a, '*' + 102: - 12EE _ideif_prnt_devtable_l1_nxt: + 103: 7822+17 12EE CDD700 call print_char + 104: ;print drive letter + 105: 7839+4 12F1 78 ld a,b + 106: 7843+7 12F2 C645 add 69 ;offset letter to D + 107: 7850+17 12F4 CDD700 call print_char + 108: 7867+7 12F7 3E3A ld a, ':' + 109: 7874+17 12F9 CDD700 call print_char + 110: 7891+7 12FC 3E20 ld a, ' ' + 111: 7898+17 12FE CDD700 call print_char + 112: ;print status + 113: 7915+11 1301 E5 push hl + 114: 7926+7 1302 7E ld a,(HL) + 115: 7933+4 1303 B7 or a + 116: 7937+7+5 1304 280E jr z, _ideif_prnt_devtable_l1_s00 + 117: 7944+7 1306 FE01 cp 0x01 + 118: 7951+7+5 1308 280F jr z, _ideif_prnt_devtable_l1_s01 + 119: 7958+7 130A FE02 cp 0x02 + 120: 7965+7+5 130C 2810 jr z, _ideif_prnt_devtable_l1_s02 + 121: 7972+7 130E FEFF cp 0xFF + 122: 7979+7+5 1310 2811 jr z, _ideif_prnt_devtable_l1_sFF + 123: 7986+12 1312 180F jr _ideif_prnt_devtable_l1_sFF + 124: - 1314 _ideif_prnt_devtable_l1_s00 + 125: 7998+10 1314 214815 ld hl,[_ideif_prnt_devtable_s00] + 126: 8008+12 1317 180D jr _ideif_prnt_devtable_l1_es + 127: - 1319 _ideif_prnt_devtable_l1_s01 + 128: 8020+10 1319 215315 ld hl,[_ideif_prnt_devtable_s01] + 129: 8030+12 131C 1808 jr _ideif_prnt_devtable_l1_es + 130: - 131E _ideif_prnt_devtable_l1_s02 + 131: 8042+10 131E 215E15 ld hl,[_ideif_prnt_devtable_s02] + 132: 8052+12 1321 1803 jr _ideif_prnt_devtable_l1_es + 133: - 1323 _ideif_prnt_devtable_l1_sFF + 134: 8064+10 1323 216915 ld hl,[_ideif_prnt_devtable_sFF] + 135: - 1326 _ideif_prnt_devtable_l1_es + 136: 8074+17 1326 CDDF00 call print_str + 137: 8091+10 1329 E1 pop hl + 138: 8101+6 132A 23 inc hl + 139: ;print FS-Type + 140: 8107+7 132B 3E30 ld a,'0' + 141: 8114+17 132D CDD700 call print_char + 142: 8131+7 1330 3E78 ld a,'x' + 143: 8138+17 1332 CDD700 call print_char + 144: 8155+7 1335 7E ld a,(HL) + 145: 8162+17 1336 CD0701 call print_a_hex + 146: 8179+7 1339 3E20 ld a,' ' + 147: 8186+17 133B CDD700 call print_char + 148: 8203+6 133E 23 inc hl + 149: ;print first sector + 150: 8209+11 133F E5 push hl + 151: 8220+14 1340 DDE1 pop ix + 152: + 153: 8234+6 1342 23 inc hl + 154: 8240+6 1343 23 inc hl + 155: 8246+6 1344 23 inc hl + 156: 8252+6 1345 23 inc hl + 157: 8258+6 1346 23 inc hl + 158: 8264+6 1347 23 inc hl + 159: 8270+6 1348 23 inc hl + 160: 8276+6 1349 23 inc hl + 161: + 162: 8282+19 134A DD7E03 ld a,(ix+3) + 163: 8301+17 134D CD0701 call print_a_hex + 164: 8318+19 1350 DD7E02 ld a,(ix+2) + 165: 8337+17 1353 CD0701 call print_a_hex + 166: 8354+19 1356 DD7E01 ld a,(ix+1) + 167: 8373+17 1359 CD0701 call print_a_hex + 168: 8390+19 135C DD7E00 ld a,(ix+0) + 169: 8409+17 135F CD0701 call print_a_hex + 170: 8426+7 1362 3E20 ld a,' ' + 171: 8433+17 1364 CDD700 call print_char + 172: ;print length + 173: 8450+19 1367 DD7E07 ld a,(ix+7) + 174: 8469+17 136A CD0701 call print_a_hex + 175: 8486+19 136D DD7E06 ld a,(ix+6) + 176: 8505+17 1370 CD0701 call print_a_hex + 177: 8522+19 1373 DD7E05 ld a,(ix+5) + 178: 8541+17 1376 CD0701 call print_a_hex + 179: 8558+19 1379 DD7E04 ld a,(ix+4) + 180: 8577+17 137C CD0701 call print_a_hex + 181: 8594+7 137F 3E20 ld a,' ' + 182: 8601+17 1381 CDD700 call print_char + 183: ;print Port + 184: 8618+7 1384 3E30 ld a,'0' + 185: 8625+17 1386 CDD700 call print_char + 186: 8642+7 1389 3E78 ld a,'x' + 187: 8649+17 138B CDD700 call print_char + 188: 8666+7 138E 7E ld a,(HL) + 189: 8673+17 138F CD0701 call print_a_hex + 190: 8690+7 1392 3E20 ld a,' ' + 191: 8697+17 1394 CDD700 call print_char + 192: 8714+6 1397 23 inc hl + 193: ;print M/S + 194: 8720+7 1398 7E ld a,(HL) + 195: 8727+11 1399 E5 push hl + 196: 8738+4 139A B7 or a + 197: 8742+10 139B CAA413 jp z,_ideif_prnt_devtable_l1_ms + 198: 8752+10 139E 217C15 ld hl,[_ideif_prnt_devtable_slave] + 199: 8762+10 13A1 C3A713 jp _ideif_prnt_devtable_l1_e2 + 200: - 13A4 _ideif_prnt_devtable_l1_ms + 201: 8772+10 13A4 217415 ld hl,[_ideif_prnt_devtable_master] + 202: - 13A7 _ideif_prnt_devtable_l1_e2 + 203: 8782+17 13A7 CDDF00 call print_str + 204: 8799+10 13AA E1 pop hl + 205: 8809+6 13AB 23 inc hl + 206: ;print str + 207: 8815+11 13AC C5 push bc + 208: 8826+7 13AD 7E ld a,(hl) + 209: 8833+4 13AE 4F ld c,a + 210: 8837+6 13AF 23 inc hl + 211: 8843+7 13B0 7E ld a,(hl) + 212: 8850+4 13B1 47 ld b,a + 213: 8854+6 13B2 23 inc hl + 214: 8860+11 13B3 E5 push hl + 215: 8871+4 13B4 60 ld h,b + 216: 8875+4 13B5 69 ld l,c + 217: 8879+17 13B6 CDDF00 call print_str + 218: 8896+17 13B9 CDF100 call print_newLine + 219: 8913+10 13BC E1 pop hl + 220: 8923+10 13BD C1 pop bc + 221: ;next + 222: 8933+6 13BE 23 inc hl + 223: 8939+6 13BF 23 inc hl + 224: 8945+4 13C0 04 inc b + 225: 8949+4 13C1 78 ld a,b + 226: 8953+7 13C2 FE04 cp 4 + 227: 8960+5+6 13C4 C8 ret z + 228: 8965+10 13C5 C3E112 jp _ideif_prnt_devtable_l1 + 229: ;------------------------------------------------------------------------------ + 230: ; ideif_init_drive + 231: ; + 232: ; initializes selected drive in table + 233: ;------------------------------------------------------------------------------ + 234: - 13C8 ideif_init_drive: + 235: 8975+17 13C8 CD9714 call ideif_get_drv_pointer + 236: ; load addresses. not used atm + 237: ;ld a,(IX+6) ;load IO Addr + 238: ;ld d,a + 239: ;ld a,(IX+7) ;load Master/Slave bit + 240: ;ld e,a + 241: 8992+17 13CB CD3C0D call ide_reset + 242: + 243: 9009+10 13CE 01FF5F ld bc, 0x5FFF ;preload timeout counter + 244: - 13D1 _ideif_init_drive_loop: + 245: 9019+7 13D1 060F ld b, IDE_REG_CMDSTS + 246: 9026+17 13D3 CD650D call ide_regread_8 ;read drive status register + 247: 9043+4 13D6 B7 or a + 248: 9047+7+5 13D7 280B jr z,_ideif_init_drive_nodrv ;no drive found + 249: 9054+8 13D9 CB77 bit 6,a + 250: 9062+7+5 13DB 200C jr nz, _ideif_init_drive_found + 251: 9069+6 13DD 1B dec de + 252: 9075+4 13DE 7A ld a,d + 253: 9079+4 13DF B3 or e + 254: 9083+7+5 13E0 2802 jr z, _ideif_init_drive_nodrv + 255: 9090+12 13E2 18ED jr _ideif_init_drive_loop + 256: + 257: - 13E4 _ideif_init_drive_nodrv: + 258: 9102+19 13E4 DD360001 ld(ix+0),0x01 + 259: 9121+10 13E8 C9 ret + 260: + 261: - 13E9 _ideif_init_drive_found: + 262: 9131+19 13E9 DD360002 ld (ix+0),0x02 + 263: ;get drive name + 264: 9150+7 13ED 060F ld b, IDE_REG_CMDSTS ;Get drive identification + 265: 9157+7 13EF 3EEC ld a, IDE_CMD_IDENT + 266: 9164+17 13F1 CD490D call ide_regwrite_8 ;Write command to drive + 267: 9181+10 13F4 211741 ld hl, MEM_IDE_BUFFER ;set read/write buffer start address + 268: 9191+17 13F7 CD830D call ide_readsector_256 ;read 256 words from device + 269: 9208+10 13FA 214D41 ld hl,MEM_IDE_BUFFER + 54 ;print device serial + 270: 9218+19 13FD DD7E0C ld a,(ix+12) ;load str pointer into de + 271: 9237+4 1400 5F ld e,a + 272: 9241+19 1401 DD7E0D ld a,(ix+13) + 273: 9260+4 1404 57 ld d,a + 274: 9264+10 1405 012800 ld bc,40 ;copy 40 char + 275: 9274+16+5 1408 EDB0 ldir + 276: ;get partition table + 277: ;read bootsector + 278: 9290+7 140A 3E01 ld a,1 ;read 1 sector + 279: 9297+7 140C 060A ld B,IDE_REG_SECTOR + 280: 9304+17 140E CD490D call ide_regwrite_8 + 281: 9321+7 1411 3E01 ld a,1 ;read sector 0 + 282: 9328+7 1413 060B ld b,IDE_REG_SSECTOR + 283: 9335+17 1415 CD490D call ide_regwrite_8 + 284: 9352+7 1418 3E00 ld a,0 ;read cylinder 0 + 285: 9359+7 141A 060C ld b,IDE_REG_LCYL + 286: 9366+17 141C CD490D call ide_regwrite_8 + 287: 9383+7 141F 3E00 ld a,0 + 288: 9390+7 1421 060D ld b,IDE_REG_HCYL + 289: 9397+17 1423 CD490D call ide_regwrite_8 + 290: 9414+7 1426 3EA0 ld a,10100000b ;read head 0 + 291: 9421+7 1428 060E ld b,IDE_REG_HEAD + 292: 9428+17 142A CD490D call ide_regwrite_8 + 293: 9445+7 142D 3E20 ld a,IDE_CMD_READSEC ;send read command + 294: 9452+7 142F 060F ld b,IDE_REG_CMDSTS + 295: 9459+17 1431 CD490D call ide_regwrite_8 + 296: 9476+10 1434 211741 ld hl, MEM_IDE_BUFFER ;set read/write buffer start address + 297: 9486+17 1437 CDB30D call ide_readsector_512_inv ;read 256 words from device + 298: ;prepare partitions + 299: 9503+7 143A 0604 ld b,4 ;Partition table length + 300: 9510+7 143C 0E00 ld c,0 ;Partition ID counter + 301: 9517+14 143E FD21D542 ld iy,MEM_IDE_BUFFER+446 ;Load offest of first partition table entry + 302: - 1442 _ideif_init_drive_prt_l1: + 303: 9531+19 1442 FD7E04 ld a,(iy+4) ;load status byte + 304: 9550+4 1445 B7 or a + 305: 9554+10 1446 C25414 jp NZ, _ideif_init_drive_prt_fnd ;If not zero, jump to print function + 306: 9564+10 1449 C34C14 jp _ideif_init_drive_prt_ln + 307: - 144C _ideif_init_drive_prt_ln: + 308: 9574+10 144C 111000 ld de,16 + 309: 9584+15 144F FD19 add iy,de + 310: 9599+8+5 1451 10EF djnz _ideif_init_drive_prt_l1 + 311: 9607+10 1453 C9 ret + 312: - 1454 _ideif_init_drive_prt_fnd; + 313: 9617+19 1454 FD7E04 ld a,(iy+4) + 314: 9636+19 1457 DD7701 ld (ix+1),a ;store partition type + 315: 9655+7 145A FE0E cp 0x0E ;if not 0xE0, continue with next entry + 316: 9662+7+5 145C 20EE jr nz, _ideif_init_drive_prt_ln + 317: ;get start LBA + 318: 9669+19 145E FD7E08 ld a,(iy+0x08) + 319: 9688+19 1461 DD7702 ld (ix+0x02),a + 320: 9707+19 1464 FD7E09 ld a,(iy+0x09) + 321: 9726+19 1467 DD7703 ld (ix+0x03),a + 322: 9745+19 146A FD7E0A ld a,(iy+0x0A) + 323: 9764+19 146D DD7704 ld (ix+0x04),a + 324: 9783+19 1470 FD7E0B ld a,(iy+0x0B) + 325: 9802+19 1473 DD7705 ld (ix+0x05),a + 326: 9821+19 1476 DD360000 ld (ix+0),0x00 + 327: ;get count LBA + 328: 9840+19 147A FD7E0C ld a,(iy+0x0C) + 329: 9859+19 147D DD7706 ld (ix+0x06),a + 330: 9878+19 1480 FD7E0D ld a,(iy+0x0D) + 331: 9897+19 1483 DD7707 ld (ix+0x07),a + 332: 9916+19 1486 FD7E0E ld a,(iy+0x0E) + 333: 9935+19 1489 DD7708 ld (ix+0x08),a + 334: 9954+19 148C FD7E0F ld a,(iy+0x0F) + 335: 9973+19 148F DD7709 ld (ix+0x09),a + 336: 9992+19 1492 DD360000 ld (ix+0),0x00 + 337:10011+10 1496 C9 ret + 338: + 339: ;------------------------------------------------------------------------------ + 340: ; ideif_get_drv_pointer + 341: ; + 342: ; gets pointer to selected drive in table + 343: ;------------------------------------------------------------------------------ + 344: - 1497 ideif_get_drv_pointer: + 345:10021+11 1497 F5 push af + 346:10032+11 1498 C5 push bc + 347: ;get selected drive + 348:10043+13 1499 3A7640 ld a,(MEM_IDE_SELECTED) + 349: ;multiply a *8 + 350:10056+4 149C 07 rlca ;*2 + 351:10060+4 149D 07 rlca ;*4 + 352:10064+4 149E 07 rlca ;*8 + 353:10068+7 149F 0600 ld b,0 + 354:10075+4 14A1 4F ld c,a + 355:10079+14 14A2 DD213640 ld ix,[MEM_IDE_DEV_TABLE] + 356:10093+15 14A6 DD09 add ix,bc + 357:10108+10 14A8 C1 pop bc + 358:10118+10 14A9 F1 pop af + 359:10128+10 14AA C9 ret + 360: + 361: ;------------------------------------------------------------------------------ + 362: ; ideif_init_all + 363: ; + 364: ; initializes interface + 365: ;------------------------------------------------------------------------------ + 366: - 14AB ideif_init_all: + 367:10138+10 14AB 21F014 ld hl, [str_dev_waitready] + 368:10148+17 14AE CDDF00 call print_str ;print waiting message + 369: + 370:10165+17 14B1 CDB512 call ideif_init_devtable + 371:10182+17 14B4 CDC813 call ideif_init_drive + 372: + 373:10199+10 14B7 210815 ld hl, [str_dev_done] + 374:10209+17 14BA CDDF00 call print_str + 375:10226+10 14BD C9 RET + 376: + 377: + 378: ;------------------------------------------------------------------------------ + 379: ; ideif_drv_sel + 380: ; + 381: ; Selects drive from table and initializes the fat16 file system + 382: ; A contains drive id + 383: ;------------------------------------------------------------------------------ + 384: + 385: + 386: + 387: ;------------------------------------------------------------------------------ + 388: ; read_lba_sector + 389: ; + 390: ; Reads A*512 byte sector into memory + 391: ; HL contains pointer to LBA address + 392: ; A contains sector count + 393: ;------------------------------------------------------------------------------ + 394: - 14BE read_lba_sector: + 395:10236+7 14BE 060A LD B,IDE_REG_SECTOR ;amount of sectores + 396:10243+17 14C0 CD490D CALL ide_regwrite_8 + 397: + 398:10260+7 14C3 7E LD A,(HL) + 399:10267+7 14C4 060B LD B,IDE_REG_LBA0 + 400:10274+17 14C6 CD490D CALL ide_regwrite_8 + 401:10291+6 14C9 23 INC HL + 402:10297+7 14CA 7E LD A,(HL) + 403:10304+7 14CB 060C LD B,IDE_REG_LBA1 + 404:10311+17 14CD CD490D CALL ide_regwrite_8 + 405:10328+6 14D0 23 INC HL + 406:10334+7 14D1 7E LD A,(HL) + 407:10341+7 14D2 060D LD B,IDE_REG_LBA2 + 408:10348+17 14D4 CD490D CALL ide_regwrite_8 + 409:10365+6 14D7 23 INC HL + 410:10371+7 14D8 7E LD A,(HL) + 411:10378+7 14D9 E60F AND 00001111b + 412:10385+7 14DB F6E0 OR 11100000b + 413:10392+7 14DD 060E LD B,IDE_REG_LBA3 + 414:10399+17 14DF CD490D CALL ide_regwrite_8 + 415: + 416:10416+7 14E2 3E20 LD A,IDE_CMD_READSEC ;send read command + 417:10423+7 14E4 060F LD B,IDE_REG_CMDSTS + 418:10430+17 14E6 CD490D CALL ide_regwrite_8 + 419:10447+10 14E9 211741 LD HL,MEM_IDE_BUFFER ;set read/write buffer start address + 420:10457+17 14EC CDB30D call ide_readsector_512_inv ;read 256 words from device + 421:10474+10 14EF C9 ret + 422: + 423: + 424: + 425: + 426: + 427: ;================================================================ + 428: ; IDE strings + 429: ;=============================================================== + 430: + 431: - 14F0 str_dev_waitready: + 432: - 14F0 0D0A4465 db 13,10,"Detecting drives ... ",0 74656374 696E6720 64726976 - 65732000 - 126: - 127: - 129D str_dev_ready: - 128: - 129D 666F756E db "found!",13,10,"ID: ",0 - 64210D0A - 49443A20 - 00 - 129: - 12AA str_dev_ready2: - 130: - 12AA 20204465 db " Desc: ",0 - 73633A20 - 00 - 131: - 132: - 12B3 str_dev_notfound: - 133: - 12B3 6E6F2064 db "no drive",13,10,0 - 72697665 - 0D0A00 + 6573202E + 2E2E2000 + 433: - 1508 str_dev_done: + 434: - 1508 646F6E65 db "done!",13,10,0 + 210D0A00 + 435: + 436: - 1510 _ideif_prnt_devtable_hdr: + 437: - 1510 44525620 db "DRV Status Type LBA Length Port M/S Name",10,13,0 + 53746174 + 75732020 + 20205479 + 7065204C + 42412020 + 20202020 + 4C656E67 + 74682020 + 20506F72 + 74204D2F + 53202020 + 204E616D + 650A0D00 + 438: - 1548 _ideif_prnt_devtable_s00: + 439: - 1548 41766169 db "Avail ",0 + 6C202020 + 202000 + 440: - 1553 _ideif_prnt_devtable_s01: + 441: - 1553 4E6F7420 db "Not Found ",0 + 466F756E + 642000 + 442: - 155E _ideif_prnt_devtable_s02: + 443: - 155E 556E6B6F db "Unkown FS ",0 + 776E2046 + 532000 + 444: - 1569 _ideif_prnt_devtable_sFF: + 445: - 1569 4374726C db "Ctrl. Err ",0 + 2E204572 + 722000 + 446: - 1574 _ideif_prnt_devtable_master: + 447: - 1574 4D617374 db "Master ",0 + 65722000 + 448: - 157C _ideif_prnt_devtable_slave: **** main.asm **** - 504: .include "prettydump.s" ;include monitor symbols. + 177: - 157C 536C6176 db "Slave ",0 + 65202000 + 178: .include "kdrv_siic.s" +**** include/kdrv_siic.s **** + 1: ;---------------------------------------------------------------- + 2: ;BIOS Driver for I2C Protocol (Software) + 3: ;by Dennis Gunia (01/2024) + 4: ; + 5: ; SCL is connected to PA1 of PIO (U6) with pull-up + 6: ; SDA is connected to PA0 of PIO (U6) with pull-up + 7: ;---------------------------------------------------------------- + 8: + 9: + 10: ;================================================================ + 11: ; I/O registers + 12: ;================================================================ + 13: + 14: + 15: ;================================================================ + 16: ; I/O pins + 17: ;================================================================ + 18: - 0001 IIC_CLK .EQU 00000001b + 19: - 0002 IIC_DATA .EQU 00000010b + 20: + 21: ;================================================================ + 22: ; basic access functions + 23: ;================================================================ + 24: ;HL contains buffer location + 25: ;B defines amount of bytes to send + 26: ;C contains device address + 27: - 1584 iic_send_buffer: + 28:10484+17 1584 CDE615 CALL iic_send_sbit ;Send startbit + 29:10501+4 1587 79 LD A,C + 30:10505+7 1588 E6FE AND 0xFE ;Mask R/W bit (must be 0 for write) + 31:10512+17 158A CD7C16 CALL iic_send_byte ;Send Address + 32:10529+17 158D CD1C16 CALL iic_read_ack + 33:10546+4 1590 B7 OR A ; if no ack, error + 34:10550+10 1591 C2A815 JP NZ, iic_send_buffer_err + 35: - 1594 iic_send_buffer_loop; + 36:10560+7 1594 7E LD A,(HL) + 37:10567+6 1595 23 INC HL + 38:10573+17 1596 CD7C16 CALL iic_send_byte + 39:10590+17 1599 CD1C16 CALL iic_read_ack + 40:10607+4 159C B7 OR A ; if no ack, error + 41:10611+10 159D C2A815 JP NZ, iic_send_buffer_err + 42:10621+8+5 15A0 10F2 DJNZ iic_send_buffer_loop ;loop for remaining bytes + 43: - 15A2 iic_send_buffer_done: + 44:10629+17 15A2 CDFB15 CALL iic_send_ebit + 45:10646+7 15A5 3E00 LD A,0 + 46:10653+10 15A7 C9 RET + 47: - 15A8 iic_send_buffer_err: + 48:10663+17 15A8 CDFB15 CALL iic_send_ebit + 49:10680+7 15AB 3E01 LD A,1 + 50:10687+10 15AD C9 RET + 51: + 52: ;HL contains buffer location + 53: ;B defines amount of bytes to send + 54: ;C contains device address + 55: - 15AE iic_receive_buffer: + 56:10697+4 15AE 05 DEC B + 57:10701+17 15AF CDE615 CALL iic_send_sbit ;Send startbit + 58:10718+4 15B2 79 LD A,C + 59:10722+7 15B3 F601 OR 0x01 ;set R/W bit (must be 1 for read) + 60:10729+17 15B5 CD7C16 CALL iic_send_byte ;Send Address + 61:10746+17 15B8 CD1C16 CALL iic_read_ack + 62:10763+4 15BB B7 OR A ; if no ack, error + 63:10767+10 15BC C2D715 JP NZ, iic_receive_buffer_err + 64: - 15BF iic_receive_buffer_loop: + 65:10777+17 15BF CDA216 CALL iic_receive_byte + 66:10794+7 15C2 77 LD (HL),A + 67:10801+6 15C3 23 INC HL + 68:10807+17 15C4 CD4216 CALL iic_send_ack + 69:10824+8+5 15C7 10F6 DJNZ iic_receive_buffer_loop + 70: ; last time: + 71:10832+17 15C9 CDA216 CALL iic_receive_byte + 72:10849+7 15CC 77 LD (HL),A + 73:10856+6 15CD 23 INC HL + 74:10862+17 15CE CD5F16 CALL iic_send_nack + 75: + 76: - 15D1 iic_receive_buffer_done: + 77:10879+17 15D1 CDFB15 CALL iic_send_ebit + 78:10896+7 15D4 3E00 LD A,0 + 79:10903+10 15D6 C9 RET + 80: - 15D7 iic_receive_buffer_err: + 81:10913+17 15D7 CDFB15 CALL iic_send_ebit + 82:10930+7 15DA 3E01 LD A,1 + 83:10937+10 15DC C9 RET + 84: + 85: + 86: + 87: ;================================================================ + 88: ; I/O access functions + 89: ;================================================================ + 90: + 91: ;Reset PIO configuration + 92: - 15DD iic_init: + 93: ;Set port to controll mode (MODE3) + 94:10947+7 15DD 3ECF LD A,0xCF + 95:10954+11 15DF D3F6 OUT (CS_PIO_AC), A + 96: ;Set inputs/outputs + 97:10965+7 15E1 3EF0 LD A,0xF0 + 98:10972+11 15E3 D3F6 OUT (CS_PIO_AC), A + 99:10983+10 15E5 C9 RET + 100: + 101: ; send start bit + 102: - 15E6 iic_send_sbit: + 103: ;Set port to controll mode (MODE3) + 104:10993+7 15E6 3ECF LD A,0xCF + 105:11000+11 15E8 D3F6 OUT (CS_PIO_AC), A + 106: ;Set inputs/outputs (SDA and SCL is now output) + 107:11011+7 15EA 3EFC LD A,0xFC + 108:11018+11 15EC D3F6 OUT (CS_PIO_AC), A + 109: ;SCL HIGH, SDA LOW + 110:11029+7 15EE 3E02 LD A,0x02 + 111:11036+11 15F0 D3F4 OUT (CS_PIO_AD), A + 112:11047+4 15F2 00 NOP + 113:11051+4 15F3 00 NOP + 114:11055+7 15F4 3E00 LD A,0x00 + 115:11062+11 15F6 D3F4 OUT (CS_PIO_AD), A + 116:11073+4 15F8 00 NOP + 117:11077+4 15F9 00 NOP + 118:11081+10 15FA C9 RET + 119: + 120: ; send end/stop bit + 121: - 15FB iic_send_ebit: + 122: ;Set port to controll mode (MODE3) + 123:11091+7 15FB 3ECF LD A,0xCF + 124:11098+11 15FD D3F6 OUT (CS_PIO_AC), A + 125: + 126: ;Set inputs/outputs (SDA and SCL is now output) + 127:11109+7 15FF 3EFC LD A,0xFC + 128:11116+11 1601 D3F6 OUT (CS_PIO_AC), A + 129: ;SCL HIGH, SDA LOW + 130:11127+7 1603 3E02 LD A,0x02 + 131:11134+11 1605 D3F4 OUT (CS_PIO_AD), A + 132:11145+4 1607 00 NOP + 133:11149+4 1608 00 NOP + 134:11153+7 1609 3E03 LD A,0x03 ; both high + 135:11160+11 160B D3F4 OUT (CS_PIO_AD), A + 136:11171+4 160D 00 NOP + 137:11175+4 160E 00 NOP + 138: ;release bus + 139: ;Set port to controll mode (MODE3) + 140:11179+7 160F 3ECF LD A,0xCF + 141:11186+11 1611 D3F6 OUT (CS_PIO_AC), A + 142:11197+4 1613 00 NOP + 143:11201+4 1614 00 NOP + 144: ;Set inputs/outputs (SDA and SCL is now input, sound enabled) + 145:11205+7 1615 3EF7 LD A,11110111b + 146:11212+11 1617 D3F6 OUT (CS_PIO_AC), A + 147:11223+4 1619 00 NOP + 148:11227+4 161A 00 NOP + 149:11231+10 161B C9 RET + 150: + 151: + 152: - 161C iic_read_ack: + 153:11241+7 161C 3ECF LD A,0xCF + 154:11248+11 161E D3F6 OUT (CS_PIO_AC), A + 155: ;Set inputs/outputs (SCL is now output, SDA input) + 156:11259+7 1620 3EFD LD A,0xFD + 157:11266+11 1622 D3F6 OUT (CS_PIO_AC), A + 158:11277+4 1624 00 NOP + 159:11281+4 1625 00 NOP + 160:11285+7 1626 3E00 LD A,0x00 ;set SCL LOW + 161:11292+11 1628 D3F4 OUT (CS_PIO_AD), A + 162:11303+4 162A 00 NOP + 163:11307+4 162B 00 NOP + 164:11311+7 162C EE02 XOR 0x02 ;set SCL HIGH + 165:11318+11 162E D3F4 OUT (CS_PIO_AD), A + 166:11329+4 1630 00 NOP + 167:11333+11 1631 DBF4 IN A,(CS_PIO_AD) ; Read SDA + 168:11344+4 1633 00 NOP + 169:11348+4 1634 00 NOP + 170:11352+11 1635 F5 PUSH AF + 171:11363+7 1636 E6FE AND 0xFE ; Filter input + 172:11370+7 1638 EE02 XOR 0x02 ;set SCL LOW + 173:11377+11 163A D3F4 OUT (CS_PIO_AD), A + 174:11388+4 163C 00 NOP + 175:11392+4 163D 00 NOP + 176:11396+10 163E F1 POP AF + 177:11406+7 163F E601 AND 1 + 178:11413+10 1641 C9 RET + 179: + 180: - 1642 iic_send_ack: + 181: ;Set port to controll mode (MODE3) + 182:11423+7 1642 3ECF LD A,0xCF + 183:11430+11 1644 D3F6 OUT (CS_PIO_AC), A + 184: ;Set inputs/outputs (SDA and SCL is now output) + 185:11441+7 1646 3EFC LD A,0xFC + 186:11448+11 1648 D3F6 OUT (CS_PIO_AC), A + 187:11459+4 164A 00 NOP + 188:11463+4 164B 00 NOP + 189:11467+7 164C 3E00 LD A,0x00 ; SCL LOW, SDA LOW + 190:11474+11 164E D3F4 OUT (CS_PIO_AD), A + 191:11485+4 1650 00 NOP + 192:11489+4 1651 00 NOP + 193:11493+7 1652 3E02 LD A,0x02 ; SCL HIGH, SDA LOW + 194:11500+11 1654 D3F4 OUT (CS_PIO_AD), A + 195:11511+4 1656 00 NOP + 196:11515+4 1657 00 NOP + 197:11519+7 1658 3E00 LD A,0x00 ; SCL LOW, SDA LOW + 198:11526+11 165A D3F4 OUT (CS_PIO_AD), A + 199:11537+4 165C 00 NOP + 200:11541+4 165D 00 NOP + 201:11545+10 165E C9 RET + 202: + 203: - 165F iic_send_nack: + 204: ;Set port to controll mode (MODE3) + 205:11555+7 165F 3ECF LD A,0xCF + 206:11562+11 1661 D3F6 OUT (CS_PIO_AC), A + 207: ;Set inputs/outputs (SDA and SCL is now output) + 208:11573+7 1663 3EFC LD A,0xFC + 209:11580+11 1665 D3F6 OUT (CS_PIO_AC), A + 210:11591+4 1667 00 NOP + 211:11595+4 1668 00 NOP + 212:11599+7 1669 3E02 LD A,0x02 ; SCL LOW, SDA HIGH + 213:11606+11 166B D3F4 OUT (CS_PIO_AD), A + 214:11617+4 166D 00 NOP + 215:11621+4 166E 00 NOP + 216:11625+7 166F 3E03 LD A,0x03 ; both high + 217:11632+11 1671 D3F4 OUT (CS_PIO_AD), A + 218:11643+4 1673 00 NOP + 219:11647+4 1674 00 NOP + 220:11651+7 1675 3E02 LD A,0x02 ; SCL LOW, SDA HIGH + 221:11658+11 1677 D3F4 OUT (CS_PIO_AD), A + 222:11669+4 1679 00 NOP + 223:11673+4 167A 00 NOP + 224:11677+10 167B C9 RET + 225: + 226: ;A contains byte + 227: - 167C iic_send_byte: + 228:11687+11 167C C5 PUSH BC + 229:11698+4 167D 4F LD C,A ;buffer + 230: ;Set port to controll mode (MODE3) + 231:11702+7 167E 3ECF LD A,0xCF + 232:11709+11 1680 D3F6 OUT (CS_PIO_AC), A + 233: ;Set inputs/outputs (SDA and SCL is now output) + 234:11720+7 1682 3EFC LD A,0xFC + 235:11727+11 1684 D3F6 OUT (CS_PIO_AC), A + 236:11738+7 1686 0608 LD B,8 ;bit counter + 237: + 238: - 1688 iic_send_byte_loop: + 239: ;prepare data + 240:11745+8 1688 CB11 RL C + 241:11753+7 168A 3E00 LD A,0 + 242:11760+4 168C 17 RLA ; set SCA bit from carry, SCL LOW + 243:11764+11 168D D3F4 OUT (CS_PIO_AD), A + 244:11775+4 168F 00 NOP + 245:11779+4 1690 00 NOP + 246:11783+7 1691 EE02 XOR 0x02 ;set SCL HIGH + 247:11790+11 1693 D3F4 OUT (CS_PIO_AD), A + 248:11801+4 1695 00 NOP + 249:11805+4 1696 00 NOP + 250:11809+7 1697 EE02 XOR 0x02 ;set SCL LOW + 251:11816+11 1699 D3F4 OUT (CS_PIO_AD), A + 252:11827+4 169B 00 NOP + 253:11831+4 169C 00 NOP + 254:11835+8+5 169D 10E9 DJNZ iic_send_byte_loop ;loop until counter is 0 + 255: ;transmittion end / end loop + 256:11843+4 169F 79 LD A,C + 257:11847+10 16A0 C1 POP BC + 258:11857+10 16A1 C9 RET + 259: + 260: - 16A2 iic_receive_byte: + 261:11867+11 16A2 C5 PUSH BC + 262: ;Set port to controll mode (MODE3) + 263:11878+7 16A3 3ECF LD A,0xCF + 264:11885+11 16A5 D3F6 OUT (CS_PIO_AC), A + 265: ;Set inputs/outputs (SCL is now output, SDA input) + 266:11896+7 16A7 3EFD LD A,0xFD + 267:11903+11 16A9 D3F6 OUT (CS_PIO_AC), A + 268:11914+7 16AB 0608 LD B,8 ;bit counter + 269:11921+7 16AD 0E00 LD C,0 + 270: - 16AF iic_receive_byte_loop: + 271:11928+4 16AF AF XOR A ;set SCL LOW + 272:11932+11 16B0 D3F4 OUT (CS_PIO_AD), A + 273:11943+4 16B2 00 NOP + 274:11947+4 16B3 00 NOP + 275:11951+7 16B4 3E02 LD A,2 ;set SCL HIGH + 276:11958+11 16B6 D3F4 OUT (CS_PIO_AD), A + 277:11969+4 16B8 00 NOP + 278:11973+11 16B9 DBF4 IN A, (CS_PIO_AD) + 279:11984+4 16BB 00 NOP + 280:11988+4 16BC 1F RRA ;read SDA bit + 281:11992+8 16BD CB11 RL C ;store bit + 282:12000+4 16BF AF XOR A ;set SCL LOW again + 283:12004+11 16C0 D3F4 OUT (CS_PIO_AD), A + 284:12015+4 16C2 00 NOP + 285:12019+4 16C3 00 NOP + 286:12023+8+5 16C4 10E9 DJNZ iic_receive_byte_loop + 287:12031+4 16C6 79 LD A,C + 288:12035+10 16C7 C1 POP BC +**** main.asm **** + 179:12045+10 16C8 C9 RET + 180: .include "prettydump.s" **** include/prettydump.s **** 1: ;---------------------------------------------------------------- 2: ;HEX and ASCII dump function @@ -2848,67 +2887,67 @@ 11: ; HL contains start address 12: ; Destroys BC, HL 13: ;------------------------------------------------------------------------------ - 14: - 12BE dump_pretty: - 15:11987+11 12BE E5 PUSH HL - 16:11998+10 12BF 211913 LD HL,[STR_PD_HEADER] ;Print header - 17:12008+17 12C2 CDBF02 CALL print_str - 18:12025+10 12C5 E1 POP HL - 19: - 12C6 dump_pretty_row: - 20:12035+4 12C6 78 LD A,B ;Check row counter - 21:12039+4 12C7 B7 OR A - 22:12043+10 12C8 CA1813 JP Z, dump_pretty_end ;If counter is 0, exit - 23:12053+4 12CB 05 DEC B ;Decrement row counter by 1 - 24:12057+7 12CC 0E10 LD C, 16 ;Load column counter - 25:12064+4 12CE 7C LD A, H ;Print base address - 26:12068+17 12CF CDE702 CALL print_a_hex - 27:12085+4 12D2 7D LD A, L - 28:12089+17 12D3 CDE702 CALL print_a_hex - 29:12106+7 12D6 3E20 LD A, ' ' - 30:12113+17 12D8 CDB702 CALL print_char - 31: - 12DB dump_pretty_col: ;Loop for column - 32:12130+7 12DB 7E LD A,(HL) ;Load byte to disply - 33:12137+17 12DC CDE702 CALL print_a_hex - 34:12154+7 12DF 3E20 LD A, ' ' - 35:12161+17 12E1 CDB702 CALL print_char - 36:12178+6 12E4 23 INC HL - 37:12184+4 12E5 0D DEC C ;Decrement column counter - 38:12188+7+5 12E6 20F3 JR NZ, dump_pretty_col ;Loop if not 0 - 39: - 12E8 dump_pretty_ascii: - 40:12195+11 12E8 C5 PUSH BC - 41:12206+11 12E9 E5 PUSH HL - 42:12217+7 12EA 0600 LD B,0 - 43:12224+7 12EC 0E10 LD C,16 - 44:12231+15 12EE ED42 SBC HL,BC ;Reset HL by column count - 45: - 12F0 dump_pretty_ascii_loop: - 46:12246+7 12F0 7E LD A,(HL) - 47:12253+6 12F1 23 INC HL - 48:12259+7 12F2 FE20 CP 32 - 49:12266+10 12F4 DA0113 JP C, dump_pretty_ascii_none ;if less than 32, it is not a char - 50:12276+7 12F7 FE7F CP 127 - 51:12283+10 12F9 D20113 JP NC, dump_pretty_ascii_none ;if greater or equal than 128, it is not a char - 52:12293+17 12FC CDB702 call print_char - 53:12310+12 12FF 1805 jr dump_pretty_ascii_cont - 54: - 1301 dump_pretty_ascii_none: - 55:12322+7 1301 3E2E LD A,'.' - 56:12329+17 1303 CDB702 call print_char - 57: - 1306 dump_pretty_ascii_cont: - 58:12346+4 1306 0D DEC C - 59:12350+10 1307 C2F012 JP NZ, dump_pretty_ascii_loop + 14: - 16C9 dump_pretty: + 15:12055+11 16C9 E5 PUSH HL + 16:12066+10 16CA 212417 LD HL,[STR_PD_HEADER] ;Print header + 17:12076+17 16CD CDDF00 CALL print_str + 18:12093+10 16D0 E1 POP HL + 19: - 16D1 dump_pretty_row: + 20:12103+4 16D1 78 LD A,B ;Check row counter + 21:12107+4 16D2 B7 OR A + 22:12111+10 16D3 CA2317 JP Z, dump_pretty_end ;If counter is 0, exit + 23:12121+4 16D6 05 DEC B ;Decrement row counter by 1 + 24:12125+7 16D7 0E10 LD C, 16 ;Load column counter + 25:12132+4 16D9 7C LD A, H ;Print base address + 26:12136+17 16DA CD0701 CALL print_a_hex + 27:12153+4 16DD 7D LD A, L + 28:12157+17 16DE CD0701 CALL print_a_hex + 29:12174+7 16E1 3E20 LD A, ' ' + 30:12181+17 16E3 CDD700 CALL print_char + 31: - 16E6 dump_pretty_col: ;Loop for column + 32:12198+7 16E6 7E LD A,(HL) ;Load byte to disply + 33:12205+17 16E7 CD0701 CALL print_a_hex + 34:12222+7 16EA 3E20 LD A, ' ' + 35:12229+17 16EC CDD700 CALL print_char + 36:12246+6 16EF 23 INC HL + 37:12252+4 16F0 0D DEC C ;Decrement column counter + 38:12256+7+5 16F1 20F3 JR NZ, dump_pretty_col ;Loop if not 0 + 39: - 16F3 dump_pretty_ascii: + 40:12263+11 16F3 C5 PUSH BC + 41:12274+11 16F4 E5 PUSH HL + 42:12285+7 16F5 0600 LD B,0 + 43:12292+7 16F7 0E10 LD C,16 + 44:12299+15 16F9 ED42 SBC HL,BC ;Reset HL by column count + 45: - 16FB dump_pretty_ascii_loop: + 46:12314+7 16FB 7E LD A,(HL) + 47:12321+6 16FC 23 INC HL + 48:12327+7 16FD FE20 CP 32 + 49:12334+10 16FF DA0C17 JP C, dump_pretty_ascii_none ;if less than 32, it is not a char + 50:12344+7 1702 FE7F CP 127 + 51:12351+10 1704 D20C17 JP NC, dump_pretty_ascii_none ;if greater or equal than 128, it is not a char + 52:12361+17 1707 CDD700 call print_char + 53:12378+12 170A 1805 jr dump_pretty_ascii_cont + 54: - 170C dump_pretty_ascii_none: + 55:12390+7 170C 3E2E LD A,'.' + 56:12397+17 170E CDD700 call print_char + 57: - 1711 dump_pretty_ascii_cont: + 58:12414+4 1711 0D DEC C + 59:12418+10 1712 C2FB16 JP NZ, dump_pretty_ascii_loop 60: 61: - 62:12360+10 130A E1 POP HL - 63:12370+10 130B C1 POP BC - 64: - 130C dump_pretty_nextrow: - 65:12380+7 130C 3E0A LD A,10 ;New line - 66:12387+17 130E CDB702 CALL print_char - 67:12404+7 1311 3E0D LD A,13 - 68:12411+17 1313 CDB702 CALL print_char - 69:12428+12 1316 18AE JR dump_pretty_row ;Else next line - 70: - 1318 dump_pretty_end: - 71:12440+10 1318 C9 RET + 62:12428+10 1715 E1 POP HL + 63:12438+10 1716 C1 POP BC + 64: - 1717 dump_pretty_nextrow: + 65:12448+7 1717 3E0A LD A,10 ;New line + 66:12455+17 1719 CDD700 CALL print_char + 67:12472+7 171C 3E0D LD A,13 + 68:12479+17 171E CDD700 CALL print_char + 69:12496+12 1721 18AE JR dump_pretty_row ;Else next line + 70: - 1723 dump_pretty_end: + 71:12508+10 1723 C9 RET 72: - 73: - 1319 STR_PD_HEADER: - 74: - 1319 0D0A4241 db 13,10,'BASE 0 1 2 3 4 5 6 7 8 9 A B C D E F ASCII',13,10,0 + 73: - 1724 STR_PD_HEADER: + 74: - 1724 0D0A4241 db 13,10,'BASE 0 1 2 3 4 5 6 7 8 9 A B C D E F ASCII',13,10,0 53452030 20203120 20322020 @@ -2933,51 +2972,965 @@ 81: ; B contains length 82: ; HL contains start address 83: ;------------------------------------------------------------------------------ - 84: - 1358 print_str_fixed: - 85:12450+7 1358 7E LD A,(HL) - 86:12457+6 1359 23 INC HL - 87:12463+17 135A CDB702 CALL print_char - 88:12480+8+5 135D 10F9 DJNZ print_str_fixed - 89:12488+10 135F C9 RET + 84: - 1763 print_str_fixed: + 85:12518+7 1763 7E LD A,(HL) + 86:12525+6 1764 23 INC HL + 87:12531+17 1765 CDD700 CALL print_char + 88:12548+8+5 1768 10F9 DJNZ print_str_fixed + 89:12556+10 176A C9 RET 90: **** main.asm **** - 505: ; Strings - 506: - 1360 STR_Banner_Start: - 507: - 1360 5A384320 db "Z8C Monitor V2 by Dennis Gunia (2022)",0 + 181: .include "command.s" +**** include/command.s **** + 1: - 176B COMMAND_LUT: + 2: - 176B 64617465 db "date", 0 , [OP_RTIME], [OP_RTIME]>>8 ;Read time + 00901A + 3: - 1772 73657464 db "setdate", 0 , [OP_STIME], [OP_STIME]>>8 ;Read time + 61746500 + 281C + 4: - 177C 70696E20 db "pin ", 0 , [OP_IO_IN], [OP_IO_IN]>>8 ;Read port + 00A919 + 5: - 1783 64756D70 db "dump ",0, [OP_DUMP], [OP_DUMP]>>8 ;print pretty hexdump + 20001819 + 6: - 178B 706F7574 db "pout ", 0 , [OP_IO_OUT], [OP_IO_OUT]>>8 ;Write port + 2000BF19 + 7: - 1793 69696E20 db "iin ", 0, [OP_IIC_IN], [OP_IIC_IN]>>8 ;Read IIC + 00401A + 8: - 179A 696F7574 db "iout ", 0, [OP_IIC_OUT], [OP_IIC_OUT]>>8 ;Write IIC + 2000E019 + 9: - 17A2 63616C6C db "call ", 0, [OP_CALL], [OP_CALL]>>8 ;Call to addr + 2000F818 + 10: - 17AA 636C7200 db "clr", 0, [OP_CLR], [OP_CLR]>>8 ;Call to addr + 8C1A + 11: - 17B0 6461736D db "dasm ", 0, [OP_DASM], [OP_DASM]>>8 ;Call to addr + 20007919 + 12: - 17B8 6A702000 db "jp ", 0,[OP_EXEC], [OP_EXEC]>>8 ;jump to addr + DF18 + 13: - 17BE 72737400 db "rst", 0,0x00,0x00 ;soft reset + 0000 + 14: - 17C4 6C736473 db "lsdsk", 0,[OP_LSDSK], [OP_LSDSK]>>8 ;list disks + 6B00A11C + 15: - 17CC 73656C64 db "seldsk ", 0,[OP_SELDSK], [OP_SELDSK]>>8 ;select disk + 736B2000 + A51C + 16: - 17D6 2400DF18 db "$", 0, [OP_EXEC], [OP_EXEC]>>8 ;jump to addr + 17: - 17DA 6900A919 db "i", 0, [OP_IO_IN], [OP_IO_IN]>>8 ;Read port + 18: - 17DE 6F00BF19 db "o", 0, [OP_IO_OUT], [OP_IO_OUT]>>8 ;Write port + 19: - 17E2 21004819 db "!", 0, [OP_SET], [OP_SET]>>8 ;Write memory + 20: - 17E6 3F001819 db "?", 0, [OP_DUMP], [OP_DUMP]>>8 ;Print memory + 21: - 17EA FF db 0xFF ;End of Table + 22: + 23: - 402B IN_BUFFER .equ var_buffer + 24: + 25: - 17EB COMMAND: + 26:12566+17 17EB CDF100 call print_newLine + 27:12583+7 17EE 3E3E ld a,'>' + 28:12590+17 17F0 CDD700 call print_char + 29:12607+4 17F3 AF xor a ;reset buffer len + 30:12611+13 17F4 320040 ld (var_buffer_len),a + 31: - 17F7 COMMAND_READ: + 32:12624+17 17F7 CD1F01 call read_char + 33:12641+10 17FA CAF717 jp z, COMMAND_READ ;wait for input + 34:12651+7 17FD FE0D cp 13 ; enter + 35:12658+10 17FF CA4C18 jp z,COMMAND_PROCESS + 36:12668+7 1802 FE0A cp 10 + 37:12675+10 1804 CAF717 jp z, COMMAND_READ; skip LF for file load + 38:12685+7 1807 FE08 cp 0x08 ; backspace 0x08 VT102 0x7f Putty + 39:12692+10 1809 CA2618 jp z,COMMAND_BACKSPACE + 40: + 41:12702+11 180C F5 push af + 42: ; a contains latest char + 43:12713+10 180D 212B40 ld hl,[var_buffer] + 44:12723+7 1810 1600 ld d,0 + 45:12730+13 1812 3A0040 ld a,(var_buffer_len) + 46:12743+4 1815 5F ld e,a + 47:12747+11 1816 19 add hl,de ;hl now contains pointer to last position in buffer + 48:12758+4 1817 3C inc a + 49:12762+13 1818 320040 ld (var_buffer_len),a ;store incremented buffer length + 50: + 51:12775+10 181B F1 pop af + 52:12785+7 181C 77 ld (hl),a + 53:12792+17 181D CDD700 call print_char + 54:12809+6 1820 23 inc hl + 55:12815+4 1821 AF xor a ;a = 0 + 56:12819+7 1822 77 ld (hl),a ;always add null termination after last char + 57:12826+10 1823 C3F717 jp COMMAND_READ + 58: + 59: + 60: - 1826 COMMAND_BACKSPACE: + 61:12836+13 1826 3A0040 ld a,(var_buffer_len) + 62:12849+4 1829 A7 and a + 63:12853+10 182A CAF717 jp z, COMMAND_READ ; do not continue if already at char 0 + 64:12863+4 182D 3D dec a ;decrement length + 65:12867+13 182E 320040 ld (var_buffer_len),a ;and store it + 66:12880+4 1831 5F ld e,a ;load de with decremented value + 67:12884+7 1832 1600 ld d,0 + 68:12891+10 1834 212B40 ld hl,[var_buffer] + 69:12901+11 1837 19 add hl,de ;hl now contains pointer to last position in buffer + 70:12912+4 1838 AF xor a ; store null byte to current location + 71:12916+7 1839 77 ld (hl),a + 72: ;call print_delete + 73:12923+7 183A 3E08 ld a, 0x08 + 74:12930+17 183C CDD700 call print_char + 75:12947+7 183F 3E20 ld a, 0x20 + 76:12954+17 1841 CDD700 call print_char + 77:12971+7 1844 3E08 ld a, 0x08 + 78:12978+17 1846 CDD700 call print_char + 79:12995+10 1849 C3F717 jp COMMAND_READ + 80: - 184C COMMAND_PROCESS: + 81: ;compare + 82:13005+10 184C 216B17 LD HL,[COMMAND_LUT] ;Lookup table + 83: - 184F COMMAND_PROCESS_LOOP: + 84:13015+10 184F 112B40 LD DE,[var_buffer] ;Buffer + 85:13025+7 1852 7E LD A,(HL) ;Load first byte of entry + 86:13032+7 1853 FEFF CP 0xFF + 87:13039+10 1855 CA7E18 JP Z,COMMAND_PROCESS_NOT_FOUND ;if first byte is 0xFF, End is reached + 88: ; compare string loop + 89: - 1858 COMMAND_PROCESS_LOOP_STR1: + 90:13049+7 1858 1A LD A,(DE) + 91:13056+4 1859 47 LD B,A + 92:13060+7 185A 7E LD A,(HL) + 93:13067+4 185B B0 OR B ;not 0 -> match + 94:13071+10 185C CA8718 JP Z, COMMAND_PROCESS_FOUND ;match + 95: + 96:13081+7 185F 1A LD A,(DE) + 97:13088+4 1860 47 LD B,A + 98: ;LD A,(HL) ;Load first byte of entry + 99: ;call print_a_hex + 100:13092+7 1861 7E LD A,(HL) + 101: ;compare byte + 102:13099+4 1862 A8 XOR B + 103:13103+4 1863 B7 OR A ;if identical = resoult shopuld be zero + 104:13107+10 1864 CA6E18 JP Z, COMMAND_PROCESS_LOOP_STR2 ;then continue + 105: ; if not identical + 106:13117+7 1867 7E LD A,(HL) + 107:13124+4 1868 B7 OR A ;if reached end of compare string + 108:13128+10 1869 CA8718 JP Z, COMMAND_PROCESS_FOUND ;match + 109:13138+12 186C 1805 JR COMMAND_PROCESS_NEXT_ENTRY ;next entry on no match + 110: + 111: - 186E COMMAND_PROCESS_LOOP_STR2: ;continue with next char + 112:13150+6 186E 23 INC HL + 113:13156+6 186F 13 INC DE + 114:13162+12 1870 18E6 JR COMMAND_PROCESS_LOOP_STR1 + 115: + 116: - 1872 COMMAND_PROCESS_NEXT_ENTRYI: ;do not jump here + 117:13174+6 1872 23 INC HL + 118: - 1873 COMMAND_PROCESS_NEXT_ENTRY: ;jump here + 119:13180+7 1873 7E LD A,(HL) + 120:13187+4 1874 B7 OR A + 121:13191+10 1875 C27218 JP NZ,COMMAND_PROCESS_NEXT_ENTRYI ;loop until end of string + 122:13201+6 1878 23 INC HL ;skip pointer + 123:13207+6 1879 23 INC HL + 124:13213+6 187A 23 INC HL + 125:13219+10 187B C34F18 JP COMMAND_PROCESS_LOOP + 126: - 187E COMMAND_PROCESS_NOT_FOUND: + 127:13229+10 187E 21B818 LD HL,[_STR_NOT_FOUND] + 128:13239+17 1881 CDDF00 CALL print_str + 129:13256+10 1884 C3EB17 JP COMMAND + 130: + 131: - 1887 COMMAND_PROCESS_FOUND: + 132:13266+11 1887 E5 PUSH HL + 133:13277+10 1888 C1 POP BC + 134:13287+6 1889 03 INC BC + 135:13293+7 188A 0A LD A,(BC) + 136:13300+4 188B 6F LD L,A + 137:13304+6 188C 03 INC BC + 138:13310+7 188D 0A LD A,(BC) + 139:13317+4 188E 67 LD H,A + 140: + 141: ;HL: pointer to start of routine + 142: ;DE: buffer start of arguments + 143:13321+17 188F CD9518 CALL _COMMAND_PROCESS_FOUND + 144:13338+10 1892 C3EB17 JP COMMAND + 145: - 1895 _COMMAND_PROCESS_FOUND + 146:13348+4 1895 E9 JP (HL) + 147: + 148: - 1896 NOT_IMPLEMENTED: + 149:13352+10 1896 21A418 LD HL,[_STR_NOT_IMPLEMENTED] + 150:13362+17 1899 CDDF00 CALL print_str + 151:13379+10 189C C9 RET + 152: + 153: - 189D ERR_SYNTAX: + 154:13389+10 189D 21CC18 LD HL,[_STR_SYNTAX] + 155:13399+17 18A0 CDDF00 CALL print_str + 156:13416+10 18A3 C9 RET + 157: + 158: - 18A4 _STR_NOT_IMPLEMENTED: + 159: - 18A4 0A0D6E6F db 10,13,"not implemented",10,13,0 + 7420696D + 706C656D + 656E7465 + 640A0D00 + 160: + 161: - 18B8 _STR_NOT_FOUND: + 162: - 18B8 0A0D696E db 10,13,"invalid command",10,13,0 + 76616C69 + 6420636F + 6D6D616E + 640A0D00 + 163: + 164: - 18CC _STR_SYNTAX: +**** main.asm **** + 182: - 18CC 0A0D696E db 10,13,"invalid syntax",10,13,0 + 76616C69 + 64207379 + 6E746178 + 0A0D00 + 183: .include "cmd_mem.s" +**** include/cmd_mem.s **** + 1: - 18DF OP_EXEC: + 2: ;DE contains pointer + 3:13426+11 18DF D5 push DE + 4:13437+10 18E0 E1 pop HL + 5:13447+17 18E1 CD6401 call DHEX_TO_BYTE + 6:13464+4 18E4 47 ld b,a ;store result in b + 7:13468+4 18E5 7B ld a,e ;check for error + 8:13472+4 18E6 A7 and a + 9:13476+10 18E7 C29D18 jp nz, ERR_SYNTAX + 10:13486+6 18EA 23 inc HL + 11:13492+6 18EB 23 inc HL + 12:13498+17 18EC CD6401 call DHEX_TO_BYTE + 13:13515+4 18EF 4F ld c,a + 14:13519+4 18F0 7B ld a,e ;check for error + 15:13523+4 18F1 A7 and a + 16:13527+10 18F2 C29D18 jp nz, ERR_SYNTAX + 17:13537+4 18F5 60 ld h,b + 18:13541+4 18F6 69 ld l,c + 19:13545+4 18F7 E9 jp (hl) + 20: - 18F8 OP_CALL: + 21: ;DE contains pointer + 22:13549+11 18F8 D5 push DE + 23:13560+10 18F9 E1 pop HL + 24:13570+17 18FA CD6401 call DHEX_TO_BYTE + 25:13587+4 18FD 47 ld b,a ;store result in b + 26:13591+4 18FE 7B ld a,e ;check for error + 27:13595+4 18FF A7 and a + 28:13599+10 1900 C29D18 jp nz, ERR_SYNTAX + 29:13609+6 1903 23 inc HL + 30:13615+6 1904 23 inc HL + 31:13621+17 1905 CD6401 call DHEX_TO_BYTE + 32:13638+4 1908 4F ld c,a + 33:13642+4 1909 7B ld a,e ;check for error + 34:13646+4 190A A7 and a + 35:13650+10 190B C29D18 jp nz, ERR_SYNTAX + 36:13660+4 190E 60 ld h,b + 37:13664+4 190F 69 ld l,c + 38:13668+17 1910 CD1719 call _OP_CALL + 39:13685+17 1913 CDF100 call print_newLine + 40:13702+10 1916 C9 ret + 41: - 1917 _OP_CALL + 42:13712+4 1917 E9 jp (hl) + 43: + 44: - 1918 OP_DUMP: + 45: ;DE contains pointer + 46:13716+11 1918 D5 push DE + 47:13727+10 1919 E1 pop HL + 48:13737+17 191A CD6401 call DHEX_TO_BYTE ;parse start address + 49:13754+4 191D 47 ld b,a ;store result in b + 50:13758+4 191E 7B ld a,e ;check for error + 51:13762+4 191F A7 and a + 52:13766+10 1920 C29D18 jp nz, ERR_SYNTAX + 53:13776+6 1923 23 inc HL + 54:13782+6 1924 23 inc HL + 55:13788+17 1925 CD6401 call DHEX_TO_BYTE + 56:13805+4 1928 4F ld c,a + 57:13809+4 1929 7B ld a,e ;check for error + 58:13813+4 192A A7 and a + 59:13817+10 192B C29D18 jp nz, ERR_SYNTAX + 60:13827+6 192E 23 inc HL + 61:13833+6 192F 23 inc HL + 62:13839+7 1930 7E ld a,(HL) + 63:13846+7 1931 FE20 cp ' ' + 64:13853+10 1933 C29D18 jp nz, ERR_SYNTAX + 65:13863+6 1936 23 inc HL + 66:13869+17 1937 CD6401 call DHEX_TO_BYTE + 67:13886+11 193A F5 push af + 68:13897+4 193B 7B ld a,e ;check for error + 69:13901+4 193C A7 and a + 70:13905+10 193D C29D18 jp nz, ERR_SYNTAX + 71:13915+10 1940 F1 pop af + 72: + 73:13925+4 1941 60 ld h,b + 74:13929+4 1942 69 ld l,c + 75:13933+4 1943 47 ld b,a + 76: + 77:13937+17 1944 CDC916 call dump_pretty + 78:13954+10 1947 C9 ret + 79: + 80: - 1948 OP_SET: + 81: ;DE contains pointer + 82:13964+11 1948 D5 push DE + 83:13975+10 1949 E1 pop HL + 84:13985+17 194A CD6401 call DHEX_TO_BYTE ;parse start address + 85:14002+4 194D 47 ld b,a ;store result in b + 86:14006+4 194E 7B ld a,e ;check for error + 87:14010+4 194F A7 and a + 88:14014+10 1950 C29D18 jp nz, ERR_SYNTAX + 89:14024+6 1953 23 inc HL + 90:14030+6 1954 23 inc HL + 91:14036+17 1955 CD6401 call DHEX_TO_BYTE + 92:14053+4 1958 4F ld c,a + 93:14057+4 1959 7B ld a,e ;check for error + 94:14061+4 195A A7 and a + 95:14065+10 195B C29D18 jp nz, ERR_SYNTAX + 96: ;bc now contains the start address + 97:14075+6 195E 23 INC HL + 98:14081+6 195F 23 INC HL + 99: ;hl now cointains start addr of data bytes + 100: - 1960 _OP_SET_LOOP: + 101:14087+7 1960 7E ld a,(hl) + 102:14094+7 1961 FE00 cp 0 ;if 0 then end + 103:14101+5+6 1963 C8 RET Z + 104:14106+7 1964 FE20 cp ' ' + 105:14113+10 1966 C29D18 jp nz, ERR_SYNTAX + 106:14123+6 1969 23 inc hl ;next byte + 107:14129+17 196A CD6401 call DHEX_TO_BYTE + 108:14146+7 196D 02 ld (bc),a ;load byte to + 109:14153+4 196E 7B ld a,e + 110:14157+4 196F A7 and a + 111:14161+10 1970 C29D18 jp nz, ERR_SYNTAX + 112:14171+6 1973 03 inc bc + 113:14177+6 1974 23 inc hl + 114:14183+6 1975 23 inc hl + 115:14189+10 1976 C36019 jp _OP_SET_LOOP + 116: + 117: - 1979 OP_DASM: + 118:14199+11 1979 D5 push DE + 119:14210+10 197A E1 pop HL + 120:14220+17 197B CD6401 call DHEX_TO_BYTE + 121:14237+4 197E 47 ld b,a ;store result in b + 122:14241+4 197F 7B ld a,e ;check for error + 123:14245+4 1980 A7 and a + 124:14249+10 1981 C29D18 jp nz, ERR_SYNTAX + 125:14259+6 1984 23 inc hl + 126:14265+6 1985 23 inc hl + 127:14271+17 1986 CD6401 call DHEX_TO_BYTE + 128:14288+4 1989 4F ld c,a + 129:14292+4 198A 7B ld a,e ;check for error + 130:14296+4 198B A7 and a + 131:14300+10 198C C29D18 jp nz, ERR_SYNTAX + 132:14310+6 198F 23 inc hl + 133:14316+6 1990 23 inc hl + 134:14322+7 1991 7E ld a,(HL) + 135:14329+7 1992 FE20 cp ' ' + 136:14336+10 1994 C29D18 jp nz, ERR_SYNTAX + 137:14346+6 1997 23 inc hl + 138:14352+17 1998 CD6401 call DHEX_TO_BYTE + 139:14369+11 199B F5 push af + 140:14380+4 199C 7B ld a,e ;check for error + 141:14384+4 199D A7 and a + 142:14388+10 199E C29D18 jp nz, ERR_SYNTAX + 143:14398+4 19A1 60 ld h,b + 144:14402+4 19A2 69 ld l,c + 145:14406+10 19A3 F1 pop af ;restore af + 146:14416+4 19A4 47 ld b,a + 147:14420+17 19A5 CDB501 call disassemble +**** main.asm **** + 184:14437+10 19A8 C9 ret + 185: .include "cmd_io.s" +**** include/cmd_io.s **** + 1: - 19A9 OP_IO_IN: + 2:14447+11 19A9 D5 push DE + 3:14458+10 19AA E1 pop HL + 4:14468+17 19AB CD6401 call DHEX_TO_BYTE + 5:14485+4 19AE 4F ld c,a ;store result in b + 6:14489+4 19AF 7B ld a,e ;check for error + 7:14493+4 19B0 A7 and a + 8:14497+10 19B1 C29D18 jp nz, ERR_SYNTAX + 9:14507+12 19B4 ED78 in a,(c) + 10:14519+11 19B6 F5 push af + 11:14530+17 19B7 CDF100 call print_newLine + 12:14547+10 19BA F1 pop af + 13:14557+17 19BB CD0701 call print_a_hex + 14:14574+10 19BE C9 ret + 15: + 16: - 19BF OP_IO_OUT: + 17:14584+11 19BF D5 push DE + 18:14595+10 19C0 E1 pop HL + 19:14605+17 19C1 CD6401 call DHEX_TO_BYTE + 20:14622+4 19C4 4F ld c,a ;store result in b + 21:14626+4 19C5 7B ld a,e ;check for error + 22:14630+4 19C6 A7 and a + 23:14634+10 19C7 C29D18 jp nz, ERR_SYNTAX + 24:14644+6 19CA 23 inc hl + 25:14650+6 19CB 23 inc hl + 26:14656+7 19CC 7E ld a,(hl) + 27:14663+7 19CD FE20 cp ' ' + 28:14670+10 19CF C29D18 jp nz, ERR_SYNTAX + 29:14680+6 19D2 23 inc hl + 30:14686+17 19D3 CD6401 call DHEX_TO_BYTE + 31:14703+11 19D6 F5 push af + 32:14714+4 19D7 7B ld a,e ;check for error + 33:14718+4 19D8 A7 and a + 34:14722+10 19D9 C29D18 jp nz, ERR_SYNTAX + 35:14732+10 19DC F1 pop af + 36:14742+12 19DD ED79 out (c),a + 37:14754+10 19DF C9 ret + 38: + 39: - 19E0 OP_IIC_OUT: + 40:14764+11 19E0 D5 push DE + 41:14775+10 19E1 E1 pop HL + 42:14785+17 19E2 CD6401 call DHEX_TO_BYTE ;load start addr + 43:14802+13 19E5 320C40 ld (var_scratch+1),A ;store result in ram + 44:14815+4 19E8 7B ld a,e ;check for error + 45:14819+4 19E9 A7 and a + 46:14823+10 19EA C29D18 jp nz, ERR_SYNTAX + 47:14833+6 19ED 23 inc hl + 48:14839+6 19EE 23 inc hl + 49:14845+10 19EF 010D40 LD BC,[var_scratch + 2] + 50:14855+4 19F2 AF XOR A + 51:14859+13 19F3 320B40 LD (var_scratch),A + 52: - 19F6 _OP_IIC_OUT_LOOP: + 53:14872+7 19F6 7E ld a,(hl) + 54:14879+7 19F7 FE00 cp 0 ;if 0 then end + 55:14886+10 19F9 CA121A jp z,_OP_IIC_OUT_SEND + 56:14896+7 19FC FE20 cp ' ' + 57:14903+10 19FE C29D18 jp nz, ERR_SYNTAX + 58:14913+6 1A01 23 inc hl ;next byte + 59: + 60:14919+17 1A02 CD6401 call DHEX_TO_BYTE + 61:14936+7 1A05 02 ld (bc),a + 62:14943+6 1A06 03 inc bc ;incerement pointer + 63:14949+13 1A07 3A0B40 ld a,(var_scratch) + 64:14962+4 1A0A 3C inc a ;increment counter + 65:14966+13 1A0B 320B40 ld (var_scratch),a + 66:14979+6 1A0E 23 inc HL + 67:14985+6 1A0F 23 inc HL + 68:14991+12 1A10 18E4 jr _OP_IIC_OUT_LOOP + 69: - 1A12 _OP_IIC_OUT_SEND: + 70:15003+10 1A12 210D40 ld hl,[var_scratch + 2] + 71:15013+13 1A15 3A0B40 ld a,(var_scratch) ;load amount of bytes + 72:15026+4 1A18 47 ld b,a + 73:15030+13 1A19 3A0C40 ld a,(var_scratch+1) ;load start addr + 74:15043+4 1A1C 4F ld c,a + 75:15047+17 1A1D CD8415 call iic_send_buffer + 76:15064+4 1A20 B7 or a + 77:15068+10 1A21 C2251A jp nz, _OP_IIC_ACK_ERR + 78:15078+10 1A24 C9 ret + 79: + 80: - 1A25 _OP_IIC_ACK_ERR: + 81:15088+10 1A25 212C1A LD HL,[_OP_IIC_ACK_ERR_str] + 82:15098+17 1A28 CDDF00 call print_str + 83:15115+10 1A2B C9 ret + 84: - 1A2C _OP_IIC_ACK_ERR_str: + 85: - 1A2C 0A0D6275 db 10,13,"bus-error: no ACK",0 + 732D6572 + 726F723A + 206E6F20 + 41434B00 + 86: + 87: - 1A40 OP_IIC_IN: + 88:15125+11 1A40 D5 push DE + 89:15136+10 1A41 E1 pop HL + 90:15146+17 1A42 CD6401 call DHEX_TO_BYTE ;load start addr + 91:15163+4 1A45 4F ld C,a ;store start addr to B + 92:15167+4 1A46 7B ld a,e ;check for error + 93:15171+4 1A47 A7 and a + 94:15175+10 1A48 C29D18 jp nz, ERR_SYNTAX + 95:15185+6 1A4B 23 inc hl + 96:15191+6 1A4C 23 inc hl + 97:15197+7 1A4D 7E ld a,(hl) + 98:15204+7 1A4E FE20 cp ' ' + 99:15211+10 1A50 C29D18 jp nz, ERR_SYNTAX + 100:15221+6 1A53 23 inc hl + 101:15227+17 1A54 CD6401 call DHEX_TO_BYTE ;read length + 102:15244+4 1A57 47 ld b,a ;store length in B + 103:15248+11 1A58 C5 push bc + 104:15259+4 1A59 7B ld a,e ;check for error + 105:15263+4 1A5A A7 and a + 106:15267+10 1A5B C29D18 jp nz, ERR_SYNTAX + 107:15277+10 1A5E 210B40 ld hl,[var_scratch] + 108:15287+17 1A61 CDAE15 call iic_receive_buffer + 109:15304+10 1A64 C1 pop bc + 110:15314+4 1A65 B7 or a + 111:15318+10 1A66 C2251A jp nz, _OP_IIC_ACK_ERR + 112:15328+10 1A69 217F1A ld hl,[_OP_IIC_IN_LOOP_TEXT] + 113:15338+17 1A6C CDDF00 call print_str + 114:15355+10 1A6F 210B40 ld hl,[var_scratch] + 115: ;print data + 116: - 1A72 _OP_IIC_IN_LOOP: + 117:15365+7 1A72 7E ld a,(hl) + 118:15372+17 1A73 CD0701 call print_a_hex + 119:15389+7 1A76 3E20 ld a, ' ' + 120:15396+17 1A78 CDD700 call print_char + 121:15413+6 1A7B 23 inc hl + 122:15419+8+5 1A7C 10F4 djnz _OP_IIC_IN_LOOP + 123:15427+10 1A7E C9 ret + 124: + 125: - 1A7F _OP_IIC_IN_LOOP_TEXT: + 126: - 1A7F 0A0D7265 db 10,13,"rec-buff: ",0 + 632D6275 + 66663A20 + 00 + 127: + 128: - 1A8C OP_CLR: + 129:15437+17 1A8C CDEA00 call print_clear +**** main.asm **** + 186:15454+10 1A8F C9 ret + 187: .include "cmd_date.s" +**** include/cmd_date.s **** + 1: - 00D0 ADDR_RTC .equ 0xD0 + 2: + 3: - 1A90 OP_RTIME: + 4:15464+17 1A90 CDF100 call print_newLine + 5: - 1A93 _OP_RTIME_NN: + 6: ;set pointer + 7:15481+10 1A93 214B1B ld hl,[_OP_RTIME_RD_CMD] + 8:15491+7 1A96 0601 ld b, 1 + 9:15498+7 1A98 0ED0 ld c, ADDR_RTC + 10:15505+17 1A9A CD8415 call iic_send_buffer + 11:15522+4 1A9D B7 or a + 12:15526+10 1A9E C2251A jp nz, _OP_IIC_ACK_ERR + 13: ;read RTC data + 14:15536+10 1AA1 210B40 ld hl,[var_scratch] + 15:15546+7 1AA4 0608 ld b,8 + 16:15553+7 1AA6 0ED0 ld c, ADDR_RTC + 17:15560+17 1AA8 CDAE15 call iic_receive_buffer + 18:15577+4 1AAB B7 or a + 19:15581+10 1AAC C2251A jp nz, _OP_IIC_ACK_ERR + 20: ;process display hours + 21:15591+13 1AAF 3A0D40 ld a,(var_scratch+2) + 22:15604+7 1AB2 E630 and 00110000b + 23:15611+4 1AB4 1F RRA + 24:15615+4 1AB5 1F RRA + 25:15619+4 1AB6 1F RRA + 26:15623+4 1AB7 1F RRA + 27:15627+17 1AB8 CD1901 call print_bcd + 28:15644+13 1ABB 3A0D40 ld a,(var_scratch+2) + 29:15657+7 1ABE E60F and 00001111b + 30:15664+17 1AC0 CD1901 call print_bcd + 31:15681+7 1AC3 3E3A ld a,':' + 32:15688+17 1AC5 CDD700 call print_char + 33: ;display minutes + 34:15705+13 1AC8 3A0C40 ld a,(var_scratch+1) + 35:15718+7 1ACB E670 and 01110000b + 36:15725+4 1ACD 1F RRA + 37:15729+4 1ACE 1F RRA + 38:15733+4 1ACF 1F RRA + 39:15737+4 1AD0 1F RRA + 40:15741+17 1AD1 CD1901 call print_bcd + 41:15758+13 1AD4 3A0C40 ld a,(var_scratch+1) + 42:15771+7 1AD7 E60F and 00001111b + 43:15778+17 1AD9 CD1901 call print_bcd + 44:15795+7 1ADC 3E3A ld a,':' + 45:15802+17 1ADE CDD700 call print_char + 46: ;display seconds + 47:15819+13 1AE1 3A0B40 ld a,(var_scratch+0) + 48:15832+7 1AE4 E670 and 01110000b + 49:15839+4 1AE6 1F RRA + 50:15843+4 1AE7 1F RRA + 51:15847+4 1AE8 1F RRA + 52:15851+4 1AE9 1F RRA + 53:15855+17 1AEA CD1901 call print_bcd + 54:15872+13 1AED 3A0B40 ld a,(var_scratch+0) + 55:15885+7 1AF0 E60F and 00001111b + 56:15892+17 1AF2 CD1901 call print_bcd + 57:15909+7 1AF5 3E20 ld a,' ' + 58:15916+17 1AF7 CDD700 call print_char + 59: ;display date + 60:15933+13 1AFA 3A0F40 ld a,(var_scratch+4) + 61:15946+7 1AFD E630 and 00110000b + 62:15953+4 1AFF 1F RRA + 63:15957+4 1B00 1F RRA + 64:15961+4 1B01 1F RRA + 65:15965+4 1B02 1F RRA + 66:15969+17 1B03 CD1901 call print_bcd + 67:15986+13 1B06 3A0F40 ld a,(var_scratch+4) + 68:15999+7 1B09 E60F and 00001111b + 69:16006+17 1B0B CD1901 call print_bcd + 70:16023+7 1B0E 3E2E ld a,'.' + 71:16030+17 1B10 CDD700 call print_char + 72:16047+13 1B13 3A1040 ld a,(var_scratch+5) + 73:16060+7 1B16 E610 and 00010000b + 74:16067+4 1B18 1F RRA + 75:16071+4 1B19 1F RRA + 76:16075+4 1B1A 1F RRA + 77:16079+4 1B1B 1F RRA + 78:16083+17 1B1C CD1901 call print_bcd + 79:16100+13 1B1F 3A1040 ld a,(var_scratch+5) + 80:16113+7 1B22 E60F and 00001111b + 81:16120+17 1B24 CD1901 call print_bcd + 82:16137+7 1B27 3E2E ld a,'.' + 83:16144+17 1B29 CDD700 call print_char + 84:16161+7 1B2C 3E32 ld a,'2' + 85:16168+17 1B2E CDD700 call print_char + 86:16185+7 1B31 3E30 ld a,'0' + 87:16192+17 1B33 CDD700 call print_char + 88:16209+13 1B36 3A1140 ld a,(var_scratch+6) + 89:16222+7 1B39 E6F0 and 11110000b + 90:16229+4 1B3B 1F RRA + 91:16233+4 1B3C 1F RRA + 92:16237+4 1B3D 1F RRA + 93:16241+4 1B3E 1F RRA + 94:16245+17 1B3F CD1901 call print_bcd + 95:16262+13 1B42 3A1140 ld a,(var_scratch+6) + 96:16275+7 1B45 E60F and 00001111b + 97:16282+17 1B47 CD1901 call print_bcd + 98: + 99:16299+10 1B4A C9 RET + 100: - 1B4B _OP_RTIME_RD_CMD: + 101: - 1B4B 00 db 0x00 + 102: + 103: - 1B4C 0A0D456E _OP_STIME_STR_DAY: db 10,13,"Enter Date (00-31) : ",0 + 74657220 + 44617465 + 20202020 + 2830302D + 33312920 + 3A2000 + 104: - 1B67 0A0D456E _OP_STIME_STR_MON: db 10,13,"Enter Month (00-12) : ",0 + 74657220 + 4D6F6E74 + 68202020 + 2830302D + 31322920 + 3A2000 + 105: - 1B82 0A0D456E _OP_STIME_STR_YEAR: db 10,13,"Enter Year (00-99) : ",0 + 74657220 + 59656172 + 20202020 + 2830302D + 39392920 + 3A2000 + 106: - 1B9D 0A0D456E _OP_STIME_STR_HOUR: db 10,13,"Enter Hours (00-23) : ",0 + 74657220 + 486F7572 + 73202020 + 2830302D + 32332920 + 3A2000 + 107: - 1BB8 0A0D456E _OP_STIME_STR_MIN: db 10,13,"Enter Minutes (00-59) : ",0 + 74657220 + 4D696E75 + 74657320 + 2830302D + 35392920 + 3A2000 + 108: - 1BD3 0A0D456E _OP_STIME_STR_SEC: db 10,13,"Enter Seconds (00-59) : ",0 + 74657220 + 5365636F + 6E647320 + 2830302D + 35392920 + 3A2000 + 109: - 1BEE 20696E76 _OP_STIME_INVALID: db " invaild input. Retry!",0 + 61696C64 + 20696E70 + 75742E20 + 52657472 + 792100 + 110: ;HL contains pointer to stack + 111: ;BC returns value (BCD) + 112: - 1C05 _OP_STIME_PROMPT: + 113:16309+11 1C05 E5 push hl + 114:16320+17 1C06 CDDF00 call print_str + 115:16337+10 1C09 E1 pop hl + 116:16347+17 1C0A CD3101 call read_bcd + 117:16364+7 1C0D FEFF cp 0xFF ;if failed + 118:16371+10 1C0F CA1D1C jp Z, _OP_STIME_PROMPT_ERR + 119:16381+4 1C12 47 ld b,a + 120:16385+17 1C13 CD3101 call read_bcd + 121:16402+7 1C16 FEFF cp 0xFF ;if failed + 122:16409+10 1C18 CA1D1C jp Z, _OP_STIME_PROMPT_ERR + 123:16419+4 1C1B 4F ld c,a + 124:16423+10 1C1C C9 ret + 125: - 1C1D _OP_STIME_PROMPT_ERR: + 126:16433+11 1C1D E5 push HL + 127:16444+10 1C1E 21EE1B ld hl, [_OP_STIME_INVALID] + 128:16454+17 1C21 CDDF00 call print_str + 129:16471+10 1C24 E1 pop hl + 130:16481+10 1C25 C3051C jp _OP_STIME_PROMPT + 131: + 132: + 133: + 134: - 1C28 OP_STIME: + 135:16491+4 1C28 AF xor a + 136:16495+13 1C29 320B40 ld (var_scratch),a ;set pointer + 137: ;date + 138:16508+10 1C2C 214C1B ld hl, [_OP_STIME_STR_DAY] + 139:16518+17 1C2F CD051C call _OP_STIME_PROMPT + 140:16535+4 1C32 78 ld a,b + 141:16539+17 1C33 CD9C1C call _shift4 + 142:16556+7 1C36 E630 and 00110000b ;mask bits; bit6 low -> 24h mode + 143:16563+4 1C38 B1 or c ;add second digit + 144:16567+13 1C39 321040 ld (var_scratch+5),a + 145: ;month + 146:16580+10 1C3C 21671B ld hl, [_OP_STIME_STR_MON] + 147:16590+17 1C3F CD051C call _OP_STIME_PROMPT + 148:16607+4 1C42 78 ld a,b + 149:16611+17 1C43 CD9C1C call _shift4 + 150:16628+7 1C46 E610 and 00010000b ;mask bits; bit6 low -> 24h mode + 151:16635+4 1C48 B1 or c ;add second digit + 152:16639+13 1C49 321140 ld (var_scratch+6),a + 153: ;year + 154:16652+10 1C4C 21821B ld hl, [_OP_STIME_STR_YEAR] + 155:16662+17 1C4F CD051C call _OP_STIME_PROMPT + 156:16679+4 1C52 78 ld a,b + 157:16683+17 1C53 CD9C1C call _shift4 + 158:16700+7 1C56 E6F0 and 11110000b ;mask bits; bit6 low -> 24h mode + 159:16707+4 1C58 B1 or c ;add second digit + 160:16711+13 1C59 321240 ld (var_scratch+7),a + 161: ;hours + 162:16724+10 1C5C 219D1B ld hl, [_OP_STIME_STR_HOUR] + 163:16734+17 1C5F CD051C call _OP_STIME_PROMPT + 164:16751+4 1C62 78 ld a,b + 165:16755+17 1C63 CD9C1C call _shift4 + 166:16772+7 1C66 E630 and 00110000b ;mask bits; bit6 low -> 24h mode + 167:16779+4 1C68 B1 or c ;add second digit + 168:16783+13 1C69 320E40 ld (var_scratch+3),a + 169: ; minutes + 170:16796+10 1C6C 21B81B ld hl, [_OP_STIME_STR_MIN] + 171:16806+17 1C6F CD051C call _OP_STIME_PROMPT + 172:16823+4 1C72 78 ld a,b + 173:16827+17 1C73 CD9C1C call _shift4 + 174:16844+7 1C76 E670 and 01110000b ;mask bits + 175:16851+4 1C78 B1 or c ;add second digit + 176:16855+13 1C79 320D40 ld (var_scratch+2),a + 177: ; seconds + 178:16868+10 1C7C 21D31B ld hl, [_OP_STIME_STR_SEC] + 179:16878+17 1C7F CD051C call _OP_STIME_PROMPT + 180:16895+4 1C82 78 ld a,b + 181:16899+17 1C83 CD9C1C call _shift4 + 182:16916+7 1C86 E670 and 01110000b ;mask bits / bit6 low -> 24h mode (enable clock) + 183:16923+4 1C88 B1 or c ;add second digit + 184:16927+13 1C89 320C40 ld (var_scratch+1),a + 185:16940+6 1C8C 13 inc de ;next + 186: + 187:16946+7 1C8D 0ED0 ld c, ADDR_RTC + 188:16953+7 1C8F 0608 ld b, 8 + 189:16960+10 1C91 210B40 ld hl,[var_scratch] + 190:16970+17 1C94 CD8415 call iic_send_buffer + 191:16987+4 1C97 B7 or a + 192:16991+10 1C98 C2251A jp nz, _OP_IIC_ACK_ERR + 193: + 194:17001+10 1C9B C9 ret + 195: + 196: - 1C9C _shift4: + 197:17011+4 1C9C 07 RLCA + 198:17015+4 1C9D 07 RLCA + 199:17019+4 1C9E 07 RLCA + 200:17023+4 1C9F 07 RLCA +**** main.asm **** + 188:17027+10 1CA0 C9 ret + 189: .include "cmd_disk.s" +**** include/cmd_disk.s **** + 1: - 1CA1 OP_LSDSK: + 2:17037+17 1CA1 CDD312 call ideif_prnt_devtable + 3:17054+10 1CA4 C9 ret + 4: + 5: - 1CA5 OP_SELDSK: + 6: ;DE contains pointer + 7:17064+11 1CA5 D5 push de + 8:17075+10 1CA6 E1 pop hl + 9:17085+7 1CA7 7E ld a,(hl) + 10:17092+7 1CA8 DE45 sbc 69 + 11:17099+7+5 1CAA 3808 jr c,_OP_SELDSK_INVALID + 12:17106+7 1CAC FE04 cp 4 + 13:17113+7+5 1CAE 3004 jr nc, _OP_SELDSK_INVALID + 14:17120+17 1CB0 CD0080 call 0x8000 + 15:17137+10 1CB3 C9 ret + 16: + 17: - 1CB4 _OP_SELDSK_INVALID: + 18:17147+10 1CB4 21C41C ld hl,[_OP_SELDSK_INVALID_STR] + 19:17157+17 1CB7 CDDF00 call print_str + 20:17174+10 1CBA 112000 LD DE,0x20 + 21:17184+10 1CBD 017000 LD BC,0x70 + 22:17194+17 1CC0 CD170D CALL beep + 23:17211+10 1CC3 C9 ret + 24: + 25: - 1CC4 _OP_SELDSK_INVALID_STR: +**** main.asm **** + 190: - 1CC4 0A0D496E db 10,13,"Invalid drive letter",10,13,0 + 76616C69 + 64206472 + 69766520 + 6C657474 + 65720A0D + 00 + 191: .include "post.s" +**** include/post.s **** + 1: ;Power-On self test + 2: - 1CDD POST_START: + 3:17221+17 1CDD CDED1C call POST_CHECK_PIO + 4:17238+17 1CE0 CD121D call POST_CHECK_APU + 5:17255+17 1CE3 CD6A1D call POST_TEST_RTC + 6:17272+17 1CE6 CD3D1D call POST_CHECK_IDE_30 + 7:17289+17 1CE9 CD501D call POST_CHECK_IDE_40 + 8:17306+10 1CEC C9 ret + 9: + 10: - 1CED POST_CHECK_PIO: + 11:17316+10 1CED 21E11D ld hl,[str_post_pio] + 12:17326+17 1CF0 CDDF00 call print_str + 13:17343+11 1CF3 DBF6 in a,(CS_PIO_AC) ;test read from pio + 14:17354+7 1CF5 FE00 cp 0x00 ;0x78 when not installed + 15:17361+10 1CF7 C2061D jp nz, _POST_CHECK_PIO_FAILED + 16:17371+7 1CFA 3E00 ld a, 0x00 ;set present flag + 17:17378+13 1CFC 320940 ld (var_pio_present),a + 18:17391+10 1CFF 216A1E ld hl,[str_post_ok] + 19:17401+17 1D02 CDDF00 call print_str + 20:17418+10 1D05 C9 ret + 21: - 1D06 _POST_CHECK_PIO_FAILED: + 22:17428+7 1D06 3EFF ld a, 0xFF + 23:17435+13 1D08 320940 ld (var_pio_present),a + 24:17448+10 1D0B 21321E ld hl,[str_post_nd] + 25:17458+17 1D0E CDDF00 call print_str + 26:17475+10 1D11 C9 ret + 27: + 28: - 1D12 POST_CHECK_APU: + 29:17485+10 1D12 21FC1D ld hl,[str_post_apu] + 30:17495+17 1D15 CDDF00 call print_str + 31: + 32:17512+7 1D18 3EFF ld a, 0xFF + 33:17519+11 1D1A D3F8 out (CS_APU_DATA),a + 34:17530+4 1D1C 00 nop + 35:17534+4 1D1D 00 nop + 36:17538+11 1D1E DBF8 in a,(CS_APU_DATA) + 37:17549+7 1D20 FEFF cp 0xFF + 38:17556+10 1D22 C2311D jp nz, _POST_CHECK_APU_FAILED + 39:17566+7 1D25 3E00 ld a, 0x00 ;set present flag + 40:17573+13 1D27 320A40 ld (var_apu_present),a + 41:17586+10 1D2A 216A1E ld hl,[str_post_ok] + 42:17596+17 1D2D CDDF00 call print_str + 43:17613+10 1D30 C9 ret + 44: - 1D31 _POST_CHECK_APU_FAILED: + 45:17623+7 1D31 3EFF ld a, 0xFF + 46:17630+13 1D33 320A40 ld (var_apu_present),a + 47:17643+10 1D36 21321E ld hl,[str_post_nd] + 48:17653+17 1D39 CDDF00 call print_str + 49:17670+10 1D3C C9 ret + 50: + 51: - 1D3D POST_CHECK_IDE_30: + 52:17680+10 1D3D 21AB1D ld hl,[str_post_ide_30] + 53:17690+17 1D40 CDDF00 call print_str + 54:17707+11 1D43 DB30 in a,(0x30) + 55:17718+4 1D45 B7 or a + 56:17722+10 1D46 C2631D jp nz, _POST_CHECK_IDE_FAILED + 57:17732+10 1D49 216A1E ld hl,[str_post_ok] + 58:17742+17 1D4C CDDF00 call print_str + 59:17759+10 1D4F C9 ret + 60: - 1D50 POST_CHECK_IDE_40: + 61:17769+10 1D50 21C61D ld hl,[str_post_ide_40] + 62:17779+17 1D53 CDDF00 call print_str + 63:17796+11 1D56 DB40 in a,(0x40) + 64:17807+4 1D58 B7 or a + 65:17811+10 1D59 C2631D jp nz, _POST_CHECK_IDE_FAILED + 66:17821+10 1D5C 216A1E ld hl,[str_post_ok] + 67:17831+17 1D5F CDDF00 call print_str + 68:17848+10 1D62 C9 ret + 69: + 70: - 1D63 _POST_CHECK_IDE_FAILED + 71:17858+10 1D63 21321E ld hl,[str_post_nd] + 72:17868+17 1D66 CDDF00 call print_str + 73:17885+10 1D69 C9 ret + 74: + 75: - 1D6A POST_TEST_RTC: + 76:17895+7 1D6A 3E06 ld a, 0x06 + 77:17902+13 1D6C 320B40 ld (var_scratch),a + 78:17915+10 1D6F 21171E ld hl,[str_post_rtc] + 79:17925+17 1D72 CDDF00 call print_str + 80:17942+10 1D75 210B40 ld hl,[var_scratch] + 81:17952+7 1D78 0601 ld b, 1 + 82:17959+7 1D7A 0ED0 ld c, ADDR_RTC + 83:17966+17 1D7C CD8415 call iic_send_buffer + 84:17983+4 1D7F B7 or a + 85:17987+10 1D80 C29D1D jp nz, _POST_TEST_RTC_NOTFOUND + 86:17997+10 1D83 210B40 ld hl,[var_scratch] + 87:18007+7 1D86 0601 ld b, 1 + 88:18014+7 1D88 0ED0 ld c, ADDR_RTC + 89:18021+17 1D8A CDAE15 call iic_receive_buffer + 90:18038+13 1D8D 3A0B40 ld a, (var_scratch) + 91:18051+4 1D90 B7 or a + 92:18055+10 1D91 CAA41D jp z, _POST_TEST_RTC_INVALID + 93:18065+10 1D94 216A1E ld hl,[str_post_ok] + 94:18075+17 1D97 CDDF00 call print_str + 95:18092+10 1D9A C3931A jp _OP_RTIME_NN + 96: - 1D9D _POST_TEST_RTC_NOTFOUND: + 97:18102+10 1D9D 21321E ld hl,[str_post_nd] + 98:18112+17 1DA0 CDDF00 call print_str + 99:18129+10 1DA3 C9 ret + 100: - 1DA4 _POST_TEST_RTC_INVALID: + 101:18139+10 1DA4 21401E ld hl,[str_post_rtc_iv] + 102:18149+17 1DA7 CDDF00 call print_str + 103:18166+10 1DAA C9 ret + 104: + 105: - 1DAB str_post_ide_30: + 106: - 1DAB 0D0A4368 db 13,10,"Check Diskctrl.@030h... ",0 + 65636B20 + 4469736B + 6374726C + 2E403033 + 30682E2E + 2E2000 + 107: - 1DC6 str_post_ide_40: + 108: - 1DC6 0D0A4368 db 13,10,"Check Diskctrl.@040h... ",0 + 65636B20 + 4469736B + 6374726C + 2E403034 + 30682E2E + 2E2000 + 109: - 1DE1 str_post_pio: + 110: - 1DE1 0D0A4368 db 13,10,"Check IO-Controller ... ",0 + 65636B20 + 494F2D43 + 6F6E7472 + 6F6C6C65 + 72202E2E + 2E2000 + 111: - 1DFC str_post_apu: + 112: - 1DFC 0D0A4368 db 13,10,"Check AMD8911 APU ... ",0 + 65636B20 + 414D4438 + 39313120 + 41505520 + 20202E2E + 2E2000 + 113: - 1E17 str_post_rtc: + 114: - 1E17 0D0A4368 db 13,10,"Check DS1307 RTC ... ",0 + 65636B20 + 44533133 + 30372052 + 54432020 + 20202E2E + 2E2000 + 115: - 1E32 str_post_nd: + 116: - 1E32 6E6F7420 db "not detected!",0 + 64657465 + 63746564 + 2100 + 117: - 1E40 str_post_rtc_iv: + 118: - 1E40 6E6F7420 db "not set. Check battery and run 'setdate'!",0 + 7365742E + 20436865 + 636B2062 + 61747465 + 72792061 + 6E642072 + 756E2027 + 73657464 + 61746527 + 2100 + 119: - 1E6A str_post_ok: +**** main.asm **** + 192: - 1E6A 6F6B2120 db "ok! ",0 + 00 + 193: + 194: ;================================================================ + 195: ; Strings + 196: ;================================================================ + 197: - 1E6F STR_Banner_Start: + 198: - 1E6F 5A384320 db "Z8C Monitor V2.1 by Dennis Gunia (2022-2024)",0 4D6F6E69 746F7220 - 56322062 - 79204465 - 6E6E6973 - 2047756E - 69612028 - 32303232 - 2900 - 508: - 1386 STR_SyntaxError: - 509: - 1386 73796E3F db "syn?",0 + 56322E31 + 20627920 + 44656E6E + 69732047 + 756E6961 + 20283230 + 32322D32 + 30323429 00 - 510: - 138B STR_Unknown: - 511: - 138B 636D643F db "cmd?",0 - 00 - 512: - 1390 STR_HEXDUMP_HEADER: - 513: - 1390 42415345 db 'BASE 0 1 2 3 4 5 6 7 8 9 A B C D E F',0 - 20302020 - 31202032 - 20203320 - 20342020 - 35202036 - 20203720 - 20382020 - 39202041 - 20204220 - 20432020 - 44202045 - 20204600 - 514: - 515: - 516: -**** main.asm **** - 517: ;.include "debug.s" @@ -2985,31 +3938,37 @@ Statistics: 4 passes 0 jr promotions - 391 symbols - 5039 bytes + 470 symbols + 8581 bytes Symbol Table: -AY0_WRITE_REG 91 145 -A_RTS_OFF 312 786 -A_RTS_ON 31B 795 -CMD_DASM 239 569 -CMD_EXEC 12F 303 -CMD_IO_READ 21D 541 -CMD_IO_WRITE 1F4 500 -CMD_SET 1B8 440 -CMD_SET_END 1EE 494 -CMD_SET_LOOP 1D3 467 -CMD_SYNTAX_ERROR 272 626 -CMD_VIEW 14E 334 -CMD_VIEW_END 1B2 434 -CMD_VIEW_ROW 187 391 -CMD_VIEW_ROW_LOOP 199 409 -CONSOLE_INIT 27E 638 -CONSOLE_INIT_CTC 27E 638 -CONSOLE_INIT_SIO 286 646 +ADDR_RTC =D0 208 +A_RTS_OFF 152 338 +A_RTS_ON 15B 347 +BOOT_PHASE0 50 80 +BOOT_PHASE1 6E 110 +BOOT_PHASE1_LOOP 77 119 +BOOT_PHASE2 82 130 +COMMAND 17EB 6123 +COMMAND_BACKSPACE 1826 6182 +COMMAND_LUT 176B 5995 +COMMAND_PROCESS 184C 6220 +COMMAND_PROCESS_FOUND 1887 6279 +COMMAND_PROCESS_LOOP 184F 6223 +COMMAND_PROCESS_LOOP_STR1 1858 6232 +COMMAND_PROCESS_LOOP_STR2 186E 6254 +COMMAND_PROCESS_NEXT_ENTRY 1873 6259 +COMMAND_PROCESS_NEXT_ENTRYI 1872 6258 +COMMAND_PROCESS_NOT_FOUND 187E 6270 +COMMAND_READ 17F7 6135 +CONSOLE_INIT 9E 158 +CONSOLE_INIT_CTC 9E 158 +CONSOLE_INIT_SIO A6 166 +CS_APU_CTRL =F9 249 +CS_APU_DATA =F8 248 CS_BANK =00 0 CS_CTC_0 =04 4 CS_CTC_1 =05 5 @@ -3028,16 +3987,18 @@ CS_SIO_A_C =09 9 CS_SIO_A_D =08 8 CS_SIO_B_C =0B 11 CS_SIO_B_D =0A 10 -DHEX_TO_BYTE 324 804 -DHEX_TO_BYTE_FAILED 340 832 -EXEC_RST_08 EC4 3780 -EXEC_RST_10 EC8 3784 -EXEC_RST_18 ED4 3796 -HEX_TO_BIN 344 836 -HEX_TO_BIN_2 352 850 -HEX_TO_INVALID_2 359 857 +DHEX_TO_BYTE 164 356 +DHEX_TO_BYTE_FAILED 180 384 +ERR_SYNTAX 189D 6301 +EXEC_RST_08 D04 3332 +EXEC_RST_10 D08 3336 +EXEC_RST_18 D14 3348 +HEX_TO_BIN 184 388 +HEX_TO_BIN_2 192 402 +HEX_TO_INVALID_2 199 409 IDE_CMD_IDENT =EC 236 IDE_CMD_READSEC=20 32 +IDE_DEV_TABLE 1275 4725 IDE_RD =40 64 IDE_REG_ALTSTS =16 22 IDE_REG_CMDSTS =0F 15 @@ -3046,12 +4007,19 @@ IDE_REG_DRVADDR=17 23 IDE_REG_ERROR =09 9 IDE_REG_HCYL =0D 13 IDE_REG_HEAD =0E 14 +IDE_REG_LBA0 =0B 11 +IDE_REG_LBA1 =0C 12 +IDE_REG_LBA2 =0D 13 +IDE_REG_LBA3 =0E 14 IDE_REG_LCYL =0C 12 IDE_REG_SECTOR =0A 10 IDE_REG_SSECTOR=0B 11 IDE_RST =80 128 IDE_WR =20 32 +IIC_CLK =01 1 +IIC_DATA =02 2 INT_VEC 1B 27 +IN_BUFFER =402B 16427 IO_AY0_ADDR =40 64 IO_AY0_DATA =41 65 IO_AY1_ADDR =42 66 @@ -3073,277 +4041,360 @@ IO_RTC_SEC1 =21 33 IO_RTC_WEEK =2C 44 IO_RTC_YEAR1 =2B 43 IO_RTC_YERR0 =2A 42 -Includes 27E 638 -MEM_IDE_BASE =5000 20480 -MEM_IDE_BUFFER =5041 20545 -MEM_IDE_DEVICE =5000 20480 -MEM_IDE_PARTITION=5002 20482 -MEM_IDE_POINTER=5006 20486 -MEM_IDE_STATUS =5001 20481 -MEM_INT_VEC_T =40FE 16638 -MEM_LOC_LOAD =4400 17408 -MEM_VAR_BLOCK =40FB 16635 -MEM_VAR_TIMEA =40FC 16636 -MEM_VAR_TIMER =40FE 16638 -MSG_CLEAR 30A 778 -MSG_ERROR 1048 4168 -MSG_START 1061 4193 +MEM_IDE_BUFFER 4117 16663 +MEM_IDE_DEVICE 402C 16428 +MEM_IDE_DEV_TABLE 4036 16438 +MEM_IDE_FSBUFFER 4317 17175 +MEM_IDE_PARTITION 402E 16430 +MEM_IDE_POINTER 4032 16434 +MEM_IDE_SELECTED 4076 16502 +MEM_IDE_STATUS 402D 16429 +MEM_IDE_STRING_0 4077 16503 +MEM_IDE_STRING_1 409F 16543 +MEM_IDE_STRING_2 40C7 16583 +MEM_IDE_STRING_3 40EF 16623 +MSG_CLEAR 14A 330 +NOT_IMPLEMENTED 1896 6294 +OP_CALL 18F8 6392 +OP_CLR 1A8C 6796 +OP_DASM 1979 6521 +OP_DUMP 1918 6424 +OP_EXEC 18DF 6367 +OP_IIC_IN 1A40 6720 +OP_IIC_OUT 19E0 6624 +OP_IO_IN 19A9 6569 +OP_IO_OUT 19BF 6591 +OP_LSDSK 1CA1 7329 +OP_RTIME 1A90 6800 +OP_SELDSK 1CA5 7333 +OP_SET 1948 6472 +OP_STIME 1C28 7208 +POST_CHECK_APU 1D12 7442 +POST_CHECK_IDE_30 1D3D 7485 +POST_CHECK_IDE_40 1D50 7504 +POST_CHECK_PIO 1CED 7405 +POST_START 1CDD 7389 +POST_TEST_RTC 1D6A 7530 PRG_RAM_START =4110 16656 PRG_RAM_TOP =FF00 65280 PROG_MEM_START =4000 16384 PROG_ROM_START = 100 256 -PROMPT_BEGIN 99 153 -PROMPT_BEGIN_READ_BACKSPACE D6 214 -PROMPT_BEGIN_READ_LOOP A5 165 -PROMPT_BEGIN_READ_PROCESS FC 252 RST_00 00 0 RST_08 08 8 RST_10 10 16 RST_18 18 24 STACK_RAM_TOP =FFFF 65535 START_ROM =00 0 -STRCONV_BYTES_TO_HEX 35B 859 -STRCONV_BYTES_TO_HEX_1 36A 874 -STRCONV_BYTES_TO_HEX_2 374 884 -STR_Banner_Start 1360 4960 -STR_HEXDUMP_HEADER 1390 5008 -STR_PD_HEADER 1319 4889 -STR_SyntaxError 1386 4998 -STR_Unknown 138B 5003 -SYM_ACK =06 6 -SYM_C =43 67 -SYM_CAN =18 24 -SYM_EOT =04 4 -SYM_ETB =17 23 -SYM_NAK =15 21 -SYM_SOH =01 1 +STRCONV_BYTES_TO_HEX 19B 411 +STRCONV_BYTES_TO_HEX_1 1AA 426 +STRCONV_BYTES_TO_HEX_2 1B4 436 +STR_Banner_Start 1E6F 7791 +STR_PD_HEADER 1724 5924 SYS_BUF_START =4010 16400 SYS_RAM_START =4000 16384 VAR_CONSOLE_BAUD=18 24 VAR_CONSOLE_CONF=0F 15 VDP_MEM =80 128 VDP_REG =81 129 -beep ED7 3799 -beep_loop EDA 3802 -beep_pause EF7 3831 -dasm_00 ADC 2780 -dasm_01 DC8 3528 -dasm_02 B62 2914 -dasm_03 D9A 3482 -dasm_08 BDF 3039 -dasm_09 D6D 3437 -dasm_0A B44 2884 -dasm_0B DB1 3505 -dasm_10 B24 2852 -dasm_12 B6D 2925 -dasm_18 AE7 2791 -dasm_1A B4E 2894 -dasm_20 B01 2817 -dasm_22 E0E 3598 -dasm_27 BA7 2983 -dasm_28 AFA 2810 -dasm_2A DDF 3551 -dasm_2F BAB 2987 -dasm_30 AF2 2802 -dasm_32 B78 2936 -dasm_37 BB7 2999 -dasm_38 AEB 2795 -dasm_3A B58 2904 -dasm_3F BB3 2995 -dasm_76 BBB 3003 -dasm_80C6 C38 3128 -dasm_BE BD5 3029 -dasm_C3 AE0 2784 -dasm_C88E C5E 3166 -dasm_C9 B30 2864 -dasm_CD B2A 2858 -dasm_D9 BEC 3052 -dasm_DD B12 2834 -dasm_DD_01 DCF 3535 -dasm_DD_09 D88 3464 -dasm_DD_22 E24 3620 -dasm_DD_23 D9F 3487 -dasm_DD_2A DF6 3574 -dasm_DD_2B DB6 3510 -dasm_DD_34 D38 3384 -dasm_DD_35 D55 3413 -dasm_DD_86 C40 3136 -dasm_DD_8E C66 3174 -dasm_DD_96 C89 3209 -dasm_DD_9E CA9 3241 -dasm_DD_A6 CCA 3274 -dasm_DD_AE D01 3329 -dasm_DD_B6 CE6 3302 -dasm_DD_BE D1D 3357 -dasm_DD_E1 E76 3702 -dasm_DD_E3 BFC 3068 -dasm_DD_E5 E60 3680 -dasm_DD_F9 E46 3654 -dasm_E1 E70 3696 -dasm_E3 BF0 3056 -dasm_E5 E5A 3674 -dasm_E9 B09 2825 -dasm_ED_42 D7F 3455 -dasm_ED_43 E1A 3610 -dasm_ED_44 BAF 2991 -dasm_ED_45 B3A 2874 -dasm_ED_46 BC6 3014 -dasm_ED_4A D76 3446 -dasm_ED_4B DEB 3563 -dasm_ED_4D B35 2869 -dasm_ED_56 BCB 3019 -dasm_ED_5E BD0 3024 -dasm_ED_A0 C14 3092 -dasm_ED_A1 C26 3110 -dasm_ED_A8 C1D 3101 -dasm_ED_A9 C2F 3119 -dasm_ED_B0 C18 3096 -dasm_ED_B1 C2A 3114 -dasm_ED_B8 C21 3105 -dasm_ED_B9 C33 3123 -dasm_F3 BC0 3008 -dasm_F9 E3C 3644 -dasm_FB BC3 3011 -dasm_FD B1B 2843 -dasm_FD_01 DD7 3543 -dasm_FD_09 D91 3473 -dasm_FD_22 E30 3632 -dasm_FD_23 DA8 3496 -dasm_FD_2A E02 3586 -dasm_FD_2B DBF 3519 -dasm_FD_34 D44 3396 -dasm_FD_35 D61 3425 -dasm_FD_86 C4F 3151 -dasm_FD_8E C75 3189 -dasm_FD_96 C95 3221 -dasm_FD_9E CB7 3255 -dasm_FD_A6 CD6 3286 -dasm_FD_AE D0D 3341 -dasm_FD_B6 CF1 3313 -dasm_FD_BE D28 3368 -dasm_FD_E1 E7E 3710 -dasm_FD_E3 C08 3080 -dasm_FD_E5 E68 3688 -dasm_FD_F9 E50 3664 -dasm_FF B3F 2879 -dasm_UU E86 3718 -dasm_UW E8A 3722 -dasm__AND CC5 3269 -dasm__CP D19 3353 -dasm__DEC D50 3408 -dasm__ED_47 B97 2967 -dasm__ED_4F B9F 2975 -dasm__ED_57 B87 2951 -dasm__ED_5F B8F 2959 -dasm__INC D33 3379 -dasm__LD B83 2947 -dasm__OR CE2 3298 -dasm__SBC CA1 3233 -dasm__SUB C84 3204 -dasm__XOR CFC 3324 -dasm_opcode_table 684 1668 -dasm_print16hex_addr 4B1 1201 -dasm_print8hex 4C9 1225 -dasm_printFlags_table E8F 3727 -dasm_printRegister8_table E9F 3743 -dasm_printRegister8_table_HL EBF 3775 -dasm_printRegisterIX_table EA7 3751 -dasm_printRegisterIY_table EAF 3759 -dasm_printRegisterSP_table EB7 3767 -disassemble 375 885 -disassemble_continue 45B 1115 -disassemble_err 44B 1099 -disassemble_next 379 889 -disassemble_print_opcode_params_end 448 1096 -disassemble_print_opcode_params_loop 3F4 1012 -disassemble_print_opcode_raw 3B6 950 -disassemble_print_opcode_raw_fill 3CA 970 -disassemble_table_first_match 48D 1165 -disassemble_table_found 4A7 1191 -disassemble_table_notfound 4AB 1195 -disassemble_table_seek 469 1129 -disassemble_table_seek_loop 46D 1133 -dump_pretty 12BE 4798 -dump_pretty_ascii 12E8 4840 -dump_pretty_ascii_cont 1306 4870 -dump_pretty_ascii_loop 12F0 4848 -dump_pretty_ascii_none 1301 4865 -dump_pretty_col 12DB 4827 -dump_pretty_end 1318 4888 -dump_pretty_nextrow 130C 4876 -dump_pretty_row 12C6 4806 -ide_printerror 116E 4462 -ide_readsector_256 10ED 4333 -ide_readsector_256_done 111C 4380 -ide_readsector_256_waitloop 10EF 4335 -ide_readsector_512_inv 111D 4381 -ide_readsector_512_inv_waitloop 1122 4386 -ide_readsector_timeout 1158 4440 -ide_regread_8 10CF 4303 -ide_regwrite_8 10B3 4275 -ide_reset 10A6 4262 -ide_writesector_256 116D 4461 -ideif_init_drive 11F4 4596 -ideif_init_drive_detected 1222 4642 -ideif_init_drive_loop1 1208 4616 -ideif_init_drive_nodrv 121B 4635 -mon_start_complete 7B 123 -mon_start_init_ctc 50 80 -mon_start_init_serial 64 100 -mon_start_init_sound 50 80 -mon_start_ram 67 103 -mon_start_ram_loop 70 112 +_COMMAND_PROCESS_FOUND 1895 6293 +_OP_CALL 1917 6423 +_OP_IIC_ACK_ERR 1A25 6693 +_OP_IIC_ACK_ERR_str 1A2C 6700 +_OP_IIC_IN_LOOP 1A72 6770 +_OP_IIC_IN_LOOP_TEXT 1A7F 6783 +_OP_IIC_OUT_LOOP 19F6 6646 +_OP_IIC_OUT_SEND 1A12 6674 +_OP_RTIME_NN 1A93 6803 +_OP_RTIME_RD_CMD 1B4B 6987 +_OP_SELDSK_INVALID 1CB4 7348 +_OP_SELDSK_INVALID_STR 1CC4 7364 +_OP_SET_LOOP 1960 6496 +_OP_STIME_INVALID 1BEE 7150 +_OP_STIME_PROMPT 1C05 7173 +_OP_STIME_PROMPT_ERR 1C1D 7197 +_OP_STIME_STR_DAY 1B4C 6988 +_OP_STIME_STR_HOUR 1B9D 7069 +_OP_STIME_STR_MIN 1BB8 7096 +_OP_STIME_STR_MON 1B67 7015 +_OP_STIME_STR_SEC 1BD3 7123 +_OP_STIME_STR_YEAR 1B82 7042 +_POST_CHECK_APU_FAILED 1D31 7473 +_POST_CHECK_IDE_FAILED 1D63 7523 +_POST_CHECK_PIO_FAILED 1D06 7430 +_POST_TEST_RTC_INVALID 1DA4 7588 +_POST_TEST_RTC_NOTFOUND 1D9D 7581 +_STR_NOT_FOUND 18B8 6328 +_STR_NOT_IMPLEMENTED 18A4 6308 +_STR_SYNTAX 18CC 6348 +_beep_pause_l1 D30 3376 +_ideif_init_drive_found 13E9 5097 +_ideif_init_drive_loop 13D1 5073 +_ideif_init_drive_nodrv 13E4 5092 +_ideif_init_drive_prt_fnd 1454 5204 +_ideif_init_drive_prt_l1 1442 5186 +_ideif_init_drive_prt_ln 144C 5196 +_ideif_prnt_devtable_hdr 1510 5392 +_ideif_prnt_devtable_l1 12E1 4833 +_ideif_prnt_devtable_l1_e2 13A7 5031 +_ideif_prnt_devtable_l1_es 1326 4902 +_ideif_prnt_devtable_l1_ms 13A4 5028 +_ideif_prnt_devtable_l1_nxt 12EE 4846 +_ideif_prnt_devtable_l1_s00 1314 4884 +_ideif_prnt_devtable_l1_s01 1319 4889 +_ideif_prnt_devtable_l1_s02 131E 4894 +_ideif_prnt_devtable_l1_sFF 1323 4899 +_ideif_prnt_devtable_l1_sel 12EC 4844 +_ideif_prnt_devtable_master 1574 5492 +_ideif_prnt_devtable_s00 1548 5448 +_ideif_prnt_devtable_s01 1553 5459 +_ideif_prnt_devtable_s02 155E 5470 +_ideif_prnt_devtable_sFF 1569 5481 +_ideif_prnt_devtable_slave 157C 5500 +_read_bcd_invalid 147 327 +_shift4 1C9C 7324 +beep D17 3351 +beep_loop D19 3353 +beep_pause D2F 3375 +dasm_00 91C 2332 +dasm_01 C08 3080 +dasm_02 9A2 2466 +dasm_03 BDA 3034 +dasm_08 A1F 2591 +dasm_09 BAD 2989 +dasm_0A 984 2436 +dasm_0B BF1 3057 +dasm_10 964 2404 +dasm_12 9AD 2477 +dasm_18 927 2343 +dasm_1A 98E 2446 +dasm_20 941 2369 +dasm_22 C4E 3150 +dasm_27 9E7 2535 +dasm_28 93A 2362 +dasm_2A C1F 3103 +dasm_2F 9EB 2539 +dasm_30 932 2354 +dasm_32 9B8 2488 +dasm_37 9F7 2551 +dasm_38 92B 2347 +dasm_3A 998 2456 +dasm_3F 9F3 2547 +dasm_76 9FB 2555 +dasm_80C6 A78 2680 +dasm_BE A15 2581 +dasm_C3 920 2336 +dasm_C88E A9E 2718 +dasm_C9 970 2416 +dasm_CD 96A 2410 +dasm_D9 A2C 2604 +dasm_DD 952 2386 +dasm_DD_01 C0F 3087 +dasm_DD_09 BC8 3016 +dasm_DD_22 C64 3172 +dasm_DD_23 BDF 3039 +dasm_DD_2A C36 3126 +dasm_DD_2B BF6 3062 +dasm_DD_34 B78 2936 +dasm_DD_35 B95 2965 +dasm_DD_86 A80 2688 +dasm_DD_8E AA6 2726 +dasm_DD_96 AC9 2761 +dasm_DD_9E AE9 2793 +dasm_DD_A6 B0A 2826 +dasm_DD_AE B41 2881 +dasm_DD_B6 B26 2854 +dasm_DD_BE B5D 2909 +dasm_DD_E1 CB6 3254 +dasm_DD_E3 A3C 2620 +dasm_DD_E5 CA0 3232 +dasm_DD_F9 C86 3206 +dasm_E1 CB0 3248 +dasm_E3 A30 2608 +dasm_E5 C9A 3226 +dasm_E9 949 2377 +dasm_ED_42 BBF 3007 +dasm_ED_43 C5A 3162 +dasm_ED_44 9EF 2543 +dasm_ED_45 97A 2426 +dasm_ED_46 A06 2566 +dasm_ED_4A BB6 2998 +dasm_ED_4B C2B 3115 +dasm_ED_4D 975 2421 +dasm_ED_56 A0B 2571 +dasm_ED_5E A10 2576 +dasm_ED_A0 A54 2644 +dasm_ED_A1 A66 2662 +dasm_ED_A8 A5D 2653 +dasm_ED_A9 A6F 2671 +dasm_ED_B0 A58 2648 +dasm_ED_B1 A6A 2666 +dasm_ED_B8 A61 2657 +dasm_ED_B9 A73 2675 +dasm_F3 A00 2560 +dasm_F9 C7C 3196 +dasm_FB A03 2563 +dasm_FD 95B 2395 +dasm_FD_01 C17 3095 +dasm_FD_09 BD1 3025 +dasm_FD_22 C70 3184 +dasm_FD_23 BE8 3048 +dasm_FD_2A C42 3138 +dasm_FD_2B BFF 3071 +dasm_FD_34 B84 2948 +dasm_FD_35 BA1 2977 +dasm_FD_86 A8F 2703 +dasm_FD_8E AB5 2741 +dasm_FD_96 AD5 2773 +dasm_FD_9E AF7 2807 +dasm_FD_A6 B16 2838 +dasm_FD_AE B4D 2893 +dasm_FD_B6 B31 2865 +dasm_FD_BE B68 2920 +dasm_FD_E1 CBE 3262 +dasm_FD_E3 A48 2632 +dasm_FD_E5 CA8 3240 +dasm_FD_F9 C90 3216 +dasm_FF 97F 2431 +dasm_UU CC6 3270 +dasm_UW CCA 3274 +dasm__AND B05 2821 +dasm__CP B59 2905 +dasm__DEC B90 2960 +dasm__ED_47 9D7 2519 +dasm__ED_4F 9DF 2527 +dasm__ED_57 9C7 2503 +dasm__ED_5F 9CF 2511 +dasm__INC B73 2931 +dasm__LD 9C3 2499 +dasm__OR B22 2850 +dasm__SBC AE1 2785 +dasm__SUB AC4 2756 +dasm__XOR B3C 2876 +dasm_opcode_table 4C4 1220 +dasm_print16hex_addr 2F1 753 +dasm_print8hex 309 777 +dasm_printFlags_table CCF 3279 +dasm_printRegister8_table CDF 3295 +dasm_printRegister8_table_HL CFF 3327 +dasm_printRegisterIX_table CE7 3303 +dasm_printRegisterIY_table CEF 3311 +dasm_printRegisterSP_table CF7 3319 +disassemble 1B5 437 +disassemble_continue 29B 667 +disassemble_err 28B 651 +disassemble_next 1B9 441 +disassemble_print_opcode_params_end 288 648 +disassemble_print_opcode_params_loop 234 564 +disassemble_print_opcode_raw 1F6 502 +disassemble_print_opcode_raw_fill 20A 522 +disassemble_table_first_match 2CD 717 +disassemble_table_found 2E7 743 +disassemble_table_notfound 2EB 747 +disassemble_table_seek 2A9 681 +disassemble_table_seek_loop 2AD 685 +dump_pretty 16C9 5833 +dump_pretty_ascii 16F3 5875 +dump_pretty_ascii_cont 1711 5905 +dump_pretty_ascii_loop 16FB 5883 +dump_pretty_ascii_none 170C 5900 +dump_pretty_col 16E6 5862 +dump_pretty_end 1723 5923 +dump_pretty_nextrow 1717 5911 +dump_pretty_row 16D1 5841 +ide_printerror E04 3588 +ide_readsector_256 D83 3459 +ide_readsector_256_done DB2 3506 +ide_readsector_256_waitloop D85 3461 +ide_readsector_512_inv DB3 3507 +ide_readsector_512_inv_waitloop DB8 3512 +ide_readsector_timeout DEE 3566 +ide_regread_8 D65 3429 +ide_regwrite_8 D49 3401 +ide_reset D3C 3388 +ide_writesector_256 E03 3587 +ideif_get_drv_pointer 1497 5271 +ideif_init_all 14AB 5291 +ideif_init_devtable 12B5 4789 +ideif_init_drive 13C8 5064 +ideif_prnt_devtable 12D3 4819 +iic_init 15DD 5597 +iic_read_ack 161C 5660 +iic_receive_buffer 15AE 5550 +iic_receive_buffer_done 15D1 5585 +iic_receive_buffer_err 15D7 5591 +iic_receive_buffer_loop 15BF 5567 +iic_receive_byte 16A2 5794 +iic_receive_byte_loop 16AF 5807 +iic_send_ack 1642 5698 +iic_send_buffer 1584 5508 +iic_send_buffer_done 15A2 5538 +iic_send_buffer_err 15A8 5544 +iic_send_buffer_loop 1594 5524 +iic_send_byte 167C 5756 +iic_send_byte_loop 1688 5768 +iic_send_ebit 15FB 5627 +iic_send_nack 165F 5727 +iic_send_sbit 15E6 5606 mon_var_template 44 68 -mon_var_template_end 6E 110 -param_01 4D7 1239 -param_02 4FE 1278 -param_03 51B 1307 -param_03_done 553 1363 -param_03_neg 53C 1340 -param_04 557 1367 -param_04_i 567 1383 -param_05 56D 1389 -param_06 57A 1402 -param_07 594 1428 -param_08 5A1 1441 -param_09 5B6 1462 -param_09_0A 5BC 1468 -param_0A 5AD 1453 -param_10 5CB 1483 -param_11 5DB 1499 -param_11_12 5EA 1514 -param_11_12_all 60A 1546 -param_11_12_def 5FD 1533 -param_11_12_ix 602 1538 -param_11_12_iy 607 1543 -param_12 5E3 1507 -param_13 61B 1563 -param_80 63A 1594 -param_80_seek 641 1601 -param_81 631 1585 -param_comma 675 1653 -param_printRegister 650 1616 -param_printRegisterA 66E 1646 -param_printRegisterHL 666 1638 -print_a_hex 2E7 743 -print_char 2B7 695 -print_clear 2CA 714 -print_newLine 2D1 721 -print_str 2BF 703 -print_str_end 2C9 713 -print_str_fixed 1358 4952 -print_wait_out 2DC 732 -read_char 2F8 760 -read_lba_sector 1256 4694 -str_dev_notfound 12B3 4787 -str_dev_ready 129D 4765 -str_dev_ready2 12AA 4778 -str_dev_waitready 1289 4745 -str_error_start 11A1 4513 -str_error_start1 11BE 4542 -str_error_start2 11C7 4551 -str_error_time 11D0 4560 -var_buffer 4029 16425 +mon_var_template_end 370 880 +param_01 317 791 +param_02 33E 830 +param_03 35B 859 +param_03_done 393 915 +param_03_neg 37C 892 +param_04 397 919 +param_04_i 3A7 935 +param_05 3AD 941 +param_06 3BA 954 +param_07 3D4 980 +param_08 3E1 993 +param_09 3F6 1014 +param_09_0A 3FC 1020 +param_0A 3ED 1005 +param_10 40B 1035 +param_11 41B 1051 +param_11_12 42A 1066 +param_11_12_all 44A 1098 +param_11_12_def 43D 1085 +param_11_12_ix 442 1090 +param_11_12_iy 447 1095 +param_12 423 1059 +param_13 45B 1115 +param_80 47A 1146 +param_80_seek 481 1153 +param_81 471 1137 +param_comma 4B5 1205 +param_printRegister 490 1168 +param_printRegisterA 4AE 1198 +param_printRegisterHL 4A6 1190 +print_a_hex 107 263 +print_bcd 119 281 +print_char D7 215 +print_clear EA 234 +print_newLine F1 241 +print_str DF 223 +print_str_end E9 233 +print_str_fixed 1763 5987 +print_wait_out FC 252 +read_bcd 131 305 +read_char 11F 287 +read_lba_sector 14BE 5310 +str_dev_done 1508 5384 +str_dev_waitready 14F0 5360 +str_error_start E37 3639 +str_error_start1 E54 3668 +str_error_start2 E5D 3677 +str_error_time E66 3686 +str_post_apu 1DFC 7676 +str_post_ide_30 1DAB 7595 +str_post_ide_40 1DC6 7622 +str_post_nd 1E32 7730 +str_post_ok 1E6A 7786 +str_post_pio 1DE1 7649 +str_post_rtc 1E17 7703 +str_post_rtc_iv 1E40 7744 +var_apu_present 400A 16394 +var_buffer 402B 16427 var_buffer_len 4000 16384 var_bytes_count=411A 16666 var_curserchar 4006 16390 @@ -3352,6 +4403,7 @@ var_curseron 4005 16389 var_curserstate 4004 16388 var_curserx 4002 16386 var_cursery 4003 16387 +var_idebuffer 402C 16428 var_last_char 4001 16385 var_opcode =4114 16660 var_opcode_length=4116 16662 @@ -3360,26 +4412,6 @@ var_opcode_start=4110 16656 var_opcode_string=4117 16663 var_opcode_table=4112 16658 var_opcode_x =4115 16661 -var_ps2mem 4019 16409 -var_scratch 4009 16393 -xmodem_ack 107B 4219 -xmodem_await_conn F34 3892 -xmodem_end FDF 4063 -xmodem_err FA5 4005 -xmodem_init F06 3846 -xmodem_int FE6 4070 -xmodem_int_cont 1005 4101 -xmodem_nak 1089 4233 -xmodem_out 1037 4151 -xmodem_packet F3F 3903 -xmodem_packet_EOT F9D 3997 -xmodem_packet_get F51 3921 -xmodem_packet_get_crc F8A 3978 -xmodem_packet_get_data F7B 3963 -xmodem_read_timeount=03 3 -xmodem_read_wait 100A 4106 -xmodem_read_wait_loop 1018 4120 -xmodem_read_wait_timeout 1035 4149 -xmodem_wait 1097 4247 -xmodem_wait_1 109D 4253 -xmodem_wait_out 103D 4157 +var_pio_present 4009 16393 +var_ps2mem 401B 16411 +var_scratch 400B 16395 diff --git a/OperatingSystem/monitor_v2/zout/symbols.s b/OperatingSystem/monitor_v2/zout/symbols.s index e67f496..4afd540 100644 --- a/OperatingSystem/monitor_v2/zout/symbols.s +++ b/OperatingSystem/monitor_v2/zout/symbols.s @@ -1,24 +1,30 @@ ;This file is generated by the build script. ;Do not make any changes here! -AY0_WRITE_REG equ 0x91 -A_RTS_OFF equ 0x312 -A_RTS_ON equ 0x31B -CMD_DASM equ 0x239 -CMD_EXEC equ 0x12F -CMD_IO_READ equ 0x21D -CMD_IO_WRITE equ 0x1F4 -CMD_SET equ 0x1B8 -CMD_SET_END equ 0x1EE -CMD_SET_LOOP equ 0x1D3 -CMD_SYNTAX_ERROR equ 0x272 -CMD_VIEW equ 0x14E -CMD_VIEW_END equ 0x1B2 -CMD_VIEW_ROW equ 0x187 -CMD_VIEW_ROW_LOOP equ 0x199 -CONSOLE_INIT equ 0x27E -CONSOLE_INIT_CTC equ 0x27E -CONSOLE_INIT_SIO equ 0x286 +ADDR_RTC equ 0xD0 +A_RTS_OFF equ 0x152 +A_RTS_ON equ 0x15B +BOOT_PHASE0 equ 0x50 +BOOT_PHASE1 equ 0x6E +BOOT_PHASE1_LOOP equ 0x77 +BOOT_PHASE2 equ 0x82 +COMMAND equ 0x17EB +COMMAND_BACKSPACE equ 0x1826 +COMMAND_LUT equ 0x176B +COMMAND_PROCESS equ 0x184C +COMMAND_PROCESS_FOUND equ 0x1887 +COMMAND_PROCESS_LOOP equ 0x184F +COMMAND_PROCESS_LOOP_STR1 equ 0x1858 +COMMAND_PROCESS_LOOP_STR2 equ 0x186E +COMMAND_PROCESS_NEXT_ENTRY equ 0x1873 +COMMAND_PROCESS_NEXT_ENTRYI equ 0x1872 +COMMAND_PROCESS_NOT_FOUND equ 0x187E +COMMAND_READ equ 0x17F7 +CONSOLE_INIT equ 0x9E +CONSOLE_INIT_CTC equ 0x9E +CONSOLE_INIT_SIO equ 0xA6 +CS_APU_CTRL equ 0xF9 +CS_APU_DATA equ 0xF8 CS_BANK equ 0x00 CS_CTC_0 equ 0x04 CS_CTC_1 equ 0x05 @@ -37,16 +43,18 @@ CS_SIO_A_C equ 0x09 CS_SIO_A_D equ 0x08 CS_SIO_B_C equ 0x0B CS_SIO_B_D equ 0x0A -DHEX_TO_BYTE equ 0x324 -DHEX_TO_BYTE_FAILED equ 0x340 -EXEC_RST_08 equ 0xEC4 -EXEC_RST_10 equ 0xEC8 -EXEC_RST_18 equ 0xED4 -HEX_TO_BIN equ 0x344 -HEX_TO_BIN_2 equ 0x352 -HEX_TO_INVALID_2 equ 0x359 +DHEX_TO_BYTE equ 0x164 +DHEX_TO_BYTE_FAILED equ 0x180 +ERR_SYNTAX equ 0x189D +EXEC_RST_08 equ 0xD04 +EXEC_RST_10 equ 0xD08 +EXEC_RST_18 equ 0xD14 +HEX_TO_BIN equ 0x184 +HEX_TO_BIN_2 equ 0x192 +HEX_TO_INVALID_2 equ 0x199 IDE_CMD_IDENT equ 0xEC IDE_CMD_READSEC equ 0x20 +IDE_DEV_TABLE equ 0x1275 IDE_RD equ 0x40 IDE_REG_ALTSTS equ 0x16 IDE_REG_CMDSTS equ 0x0F @@ -55,12 +63,19 @@ IDE_REG_DRVADDR equ 0x17 IDE_REG_ERROR equ 0x09 IDE_REG_HCYL equ 0x0D IDE_REG_HEAD equ 0x0E +IDE_REG_LBA0 equ 0x0B +IDE_REG_LBA1 equ 0x0C +IDE_REG_LBA2 equ 0x0D +IDE_REG_LBA3 equ 0x0E IDE_REG_LCYL equ 0x0C IDE_REG_SECTOR equ 0x0A IDE_REG_SSECTOR equ 0x0B IDE_RST equ 0x80 IDE_WR equ 0x20 +IIC_CLK equ 0x01 +IIC_DATA equ 0x02 INT_VEC equ 0x1B +IN_BUFFER equ 0x402B IO_AY0_ADDR equ 0x40 IO_AY0_DATA equ 0x41 IO_AY1_ADDR equ 0x42 @@ -82,277 +97,360 @@ IO_RTC_SEC1 equ 0x21 IO_RTC_WEEK equ 0x2C IO_RTC_YEAR1 equ 0x2B IO_RTC_YERR0 equ 0x2A -Includes equ 0x27E -MEM_IDE_BASE equ 0x5000 -MEM_IDE_BUFFER equ 0x5041 -MEM_IDE_DEVICE equ 0x5000 -MEM_IDE_PARTITION equ 0x5002 -MEM_IDE_POINTER equ 0x5006 -MEM_IDE_STATUS equ 0x5001 -MEM_INT_VEC_T equ 0x40FE -MEM_LOC_LOAD equ 0x4400 -MEM_VAR_BLOCK equ 0x40FB -MEM_VAR_TIMEA equ 0x40FC -MEM_VAR_TIMER equ 0x40FE -MSG_CLEAR equ 0x30A -MSG_ERROR equ 0x1048 -MSG_START equ 0x1061 +MEM_IDE_BUFFER equ 0x4117 +MEM_IDE_DEVICE equ 0x402C +MEM_IDE_DEV_TABLE equ 0x4036 +MEM_IDE_FSBUFFER equ 0x4317 +MEM_IDE_PARTITION equ 0x402E +MEM_IDE_POINTER equ 0x4032 +MEM_IDE_SELECTED equ 0x4076 +MEM_IDE_STATUS equ 0x402D +MEM_IDE_STRING_0 equ 0x4077 +MEM_IDE_STRING_1 equ 0x409F +MEM_IDE_STRING_2 equ 0x40C7 +MEM_IDE_STRING_3 equ 0x40EF +MSG_CLEAR equ 0x14A +NOT_IMPLEMENTED equ 0x1896 +OP_CALL equ 0x18F8 +OP_CLR equ 0x1A8C +OP_DASM equ 0x1979 +OP_DUMP equ 0x1918 +OP_EXEC equ 0x18DF +OP_IIC_IN equ 0x1A40 +OP_IIC_OUT equ 0x19E0 +OP_IO_IN equ 0x19A9 +OP_IO_OUT equ 0x19BF +OP_LSDSK equ 0x1CA1 +OP_RTIME equ 0x1A90 +OP_SELDSK equ 0x1CA5 +OP_SET equ 0x1948 +OP_STIME equ 0x1C28 +POST_CHECK_APU equ 0x1D12 +POST_CHECK_IDE_30 equ 0x1D3D +POST_CHECK_IDE_40 equ 0x1D50 +POST_CHECK_PIO equ 0x1CED +POST_START equ 0x1CDD +POST_TEST_RTC equ 0x1D6A PRG_RAM_START equ 0x4110 PRG_RAM_TOP equ 0xFF00 PROG_MEM_START equ 0x4000 PROG_ROM_START equ 0x100 -PROMPT_BEGIN equ 0x99 -PROMPT_BEGIN_READ_BACKSPACE equ 0xD6 -PROMPT_BEGIN_READ_LOOP equ 0xA5 -PROMPT_BEGIN_READ_PROCESS equ 0xFC RST_00 equ 0x00 RST_08 equ 0x08 RST_10 equ 0x10 RST_18 equ 0x18 STACK_RAM_TOP equ 0xFFFF START_ROM equ 0x00 -STRCONV_BYTES_TO_HEX equ 0x35B -STRCONV_BYTES_TO_HEX_1 equ 0x36A -STRCONV_BYTES_TO_HEX_2 equ 0x374 -STR_Banner_Start equ 0x1360 -STR_HEXDUMP_HEADER equ 0x1390 -STR_PD_HEADER equ 0x1319 -STR_SyntaxError equ 0x1386 -STR_Unknown equ 0x138B -SYM_ACK equ 0x06 -SYM_C equ 0x43 -SYM_CAN equ 0x18 -SYM_EOT equ 0x04 -SYM_ETB equ 0x17 -SYM_NAK equ 0x15 -SYM_SOH equ 0x01 +STRCONV_BYTES_TO_HEX equ 0x19B +STRCONV_BYTES_TO_HEX_1 equ 0x1AA +STRCONV_BYTES_TO_HEX_2 equ 0x1B4 +STR_Banner_Start equ 0x1E6F +STR_PD_HEADER equ 0x1724 SYS_BUF_START equ 0x4010 SYS_RAM_START equ 0x4000 VAR_CONSOLE_BAUD equ 0x18 VAR_CONSOLE_CONF equ 0x0F VDP_MEM equ 0x80 VDP_REG equ 0x81 -beep equ 0xED7 -beep_loop equ 0xEDA -beep_pause equ 0xEF7 -dasm_00 equ 0xADC -dasm_01 equ 0xDC8 -dasm_02 equ 0xB62 -dasm_03 equ 0xD9A -dasm_08 equ 0xBDF -dasm_09 equ 0xD6D -dasm_0A equ 0xB44 -dasm_0B equ 0xDB1 -dasm_10 equ 0xB24 -dasm_12 equ 0xB6D -dasm_18 equ 0xAE7 -dasm_1A equ 0xB4E -dasm_20 equ 0xB01 -dasm_22 equ 0xE0E -dasm_27 equ 0xBA7 -dasm_28 equ 0xAFA -dasm_2A equ 0xDDF -dasm_2F equ 0xBAB -dasm_30 equ 0xAF2 -dasm_32 equ 0xB78 -dasm_37 equ 0xBB7 -dasm_38 equ 0xAEB -dasm_3A equ 0xB58 -dasm_3F equ 0xBB3 -dasm_76 equ 0xBBB -dasm_80C6 equ 0xC38 -dasm_BE equ 0xBD5 -dasm_C3 equ 0xAE0 -dasm_C88E equ 0xC5E -dasm_C9 equ 0xB30 -dasm_CD equ 0xB2A -dasm_D9 equ 0xBEC -dasm_DD equ 0xB12 -dasm_DD_01 equ 0xDCF -dasm_DD_09 equ 0xD88 -dasm_DD_22 equ 0xE24 -dasm_DD_23 equ 0xD9F -dasm_DD_2A equ 0xDF6 -dasm_DD_2B equ 0xDB6 -dasm_DD_34 equ 0xD38 -dasm_DD_35 equ 0xD55 -dasm_DD_86 equ 0xC40 -dasm_DD_8E equ 0xC66 -dasm_DD_96 equ 0xC89 -dasm_DD_9E equ 0xCA9 -dasm_DD_A6 equ 0xCCA -dasm_DD_AE equ 0xD01 -dasm_DD_B6 equ 0xCE6 -dasm_DD_BE equ 0xD1D -dasm_DD_E1 equ 0xE76 -dasm_DD_E3 equ 0xBFC -dasm_DD_E5 equ 0xE60 -dasm_DD_F9 equ 0xE46 -dasm_E1 equ 0xE70 -dasm_E3 equ 0xBF0 -dasm_E5 equ 0xE5A -dasm_E9 equ 0xB09 -dasm_ED_42 equ 0xD7F -dasm_ED_43 equ 0xE1A -dasm_ED_44 equ 0xBAF -dasm_ED_45 equ 0xB3A -dasm_ED_46 equ 0xBC6 -dasm_ED_4A equ 0xD76 -dasm_ED_4B equ 0xDEB -dasm_ED_4D equ 0xB35 -dasm_ED_56 equ 0xBCB -dasm_ED_5E equ 0xBD0 -dasm_ED_A0 equ 0xC14 -dasm_ED_A1 equ 0xC26 -dasm_ED_A8 equ 0xC1D -dasm_ED_A9 equ 0xC2F -dasm_ED_B0 equ 0xC18 -dasm_ED_B1 equ 0xC2A -dasm_ED_B8 equ 0xC21 -dasm_ED_B9 equ 0xC33 -dasm_F3 equ 0xBC0 -dasm_F9 equ 0xE3C -dasm_FB equ 0xBC3 -dasm_FD equ 0xB1B -dasm_FD_01 equ 0xDD7 -dasm_FD_09 equ 0xD91 -dasm_FD_22 equ 0xE30 -dasm_FD_23 equ 0xDA8 -dasm_FD_2A equ 0xE02 -dasm_FD_2B equ 0xDBF -dasm_FD_34 equ 0xD44 -dasm_FD_35 equ 0xD61 -dasm_FD_86 equ 0xC4F -dasm_FD_8E equ 0xC75 -dasm_FD_96 equ 0xC95 -dasm_FD_9E equ 0xCB7 -dasm_FD_A6 equ 0xCD6 -dasm_FD_AE equ 0xD0D -dasm_FD_B6 equ 0xCF1 -dasm_FD_BE equ 0xD28 -dasm_FD_E1 equ 0xE7E -dasm_FD_E3 equ 0xC08 -dasm_FD_E5 equ 0xE68 -dasm_FD_F9 equ 0xE50 -dasm_FF equ 0xB3F -dasm_UU equ 0xE86 -dasm_UW equ 0xE8A -dasm__AND equ 0xCC5 -dasm__CP equ 0xD19 -dasm__DEC equ 0xD50 -dasm__ED_47 equ 0xB97 -dasm__ED_4F equ 0xB9F -dasm__ED_57 equ 0xB87 -dasm__ED_5F equ 0xB8F -dasm__INC equ 0xD33 -dasm__LD equ 0xB83 -dasm__OR equ 0xCE2 -dasm__SBC equ 0xCA1 -dasm__SUB equ 0xC84 -dasm__XOR equ 0xCFC -dasm_opcode_table equ 0x684 -dasm_print16hex_addr equ 0x4B1 -dasm_print8hex equ 0x4C9 -dasm_printFlags_table equ 0xE8F -dasm_printRegister8_table equ 0xE9F -dasm_printRegister8_table_HL equ 0xEBF -dasm_printRegisterIX_table equ 0xEA7 -dasm_printRegisterIY_table equ 0xEAF -dasm_printRegisterSP_table equ 0xEB7 -disassemble equ 0x375 -disassemble_continue equ 0x45B -disassemble_err equ 0x44B -disassemble_next equ 0x379 -disassemble_print_opcode_params_end equ 0x448 -disassemble_print_opcode_params_loop equ 0x3F4 -disassemble_print_opcode_raw equ 0x3B6 -disassemble_print_opcode_raw_fill equ 0x3CA -disassemble_table_first_match equ 0x48D -disassemble_table_found equ 0x4A7 -disassemble_table_notfound equ 0x4AB -disassemble_table_seek equ 0x469 -disassemble_table_seek_loop equ 0x46D -dump_pretty equ 0x12BE -dump_pretty_ascii equ 0x12E8 -dump_pretty_ascii_cont equ 0x1306 -dump_pretty_ascii_loop equ 0x12F0 -dump_pretty_ascii_none equ 0x1301 -dump_pretty_col equ 0x12DB -dump_pretty_end equ 0x1318 -dump_pretty_nextrow equ 0x130C -dump_pretty_row equ 0x12C6 -ide_printerror equ 0x116E -ide_readsector_256 equ 0x10ED -ide_readsector_256_done equ 0x111C -ide_readsector_256_waitloop equ 0x10EF -ide_readsector_512_inv equ 0x111D -ide_readsector_512_inv_waitloop equ 0x1122 -ide_readsector_timeout equ 0x1158 -ide_regread_8 equ 0x10CF -ide_regwrite_8 equ 0x10B3 -ide_reset equ 0x10A6 -ide_writesector_256 equ 0x116D -ideif_init_drive equ 0x11F4 -ideif_init_drive_detected equ 0x1222 -ideif_init_drive_loop1 equ 0x1208 -ideif_init_drive_nodrv equ 0x121B -mon_start_complete equ 0x7B -mon_start_init_ctc equ 0x50 -mon_start_init_serial equ 0x64 -mon_start_init_sound equ 0x50 -mon_start_ram equ 0x67 -mon_start_ram_loop equ 0x70 +_COMMAND_PROCESS_FOUND equ 0x1895 +_OP_CALL equ 0x1917 +_OP_IIC_ACK_ERR equ 0x1A25 +_OP_IIC_ACK_ERR_str equ 0x1A2C +_OP_IIC_IN_LOOP equ 0x1A72 +_OP_IIC_IN_LOOP_TEXT equ 0x1A7F +_OP_IIC_OUT_LOOP equ 0x19F6 +_OP_IIC_OUT_SEND equ 0x1A12 +_OP_RTIME_NN equ 0x1A93 +_OP_RTIME_RD_CMD equ 0x1B4B +_OP_SELDSK_INVALID equ 0x1CB4 +_OP_SELDSK_INVALID_STR equ 0x1CC4 +_OP_SET_LOOP equ 0x1960 +_OP_STIME_INVALID equ 0x1BEE +_OP_STIME_PROMPT equ 0x1C05 +_OP_STIME_PROMPT_ERR equ 0x1C1D +_OP_STIME_STR_DAY equ 0x1B4C +_OP_STIME_STR_HOUR equ 0x1B9D +_OP_STIME_STR_MIN equ 0x1BB8 +_OP_STIME_STR_MON equ 0x1B67 +_OP_STIME_STR_SEC equ 0x1BD3 +_OP_STIME_STR_YEAR equ 0x1B82 +_POST_CHECK_APU_FAILED equ 0x1D31 +_POST_CHECK_IDE_FAILED equ 0x1D63 +_POST_CHECK_PIO_FAILED equ 0x1D06 +_POST_TEST_RTC_INVALID equ 0x1DA4 +_POST_TEST_RTC_NOTFOUND equ 0x1D9D +_STR_NOT_FOUND equ 0x18B8 +_STR_NOT_IMPLEMENTED equ 0x18A4 +_STR_SYNTAX equ 0x18CC +_beep_pause_l1 equ 0xD30 +_ideif_init_drive_found equ 0x13E9 +_ideif_init_drive_loop equ 0x13D1 +_ideif_init_drive_nodrv equ 0x13E4 +_ideif_init_drive_prt_fnd equ 0x1454 +_ideif_init_drive_prt_l1 equ 0x1442 +_ideif_init_drive_prt_ln equ 0x144C +_ideif_prnt_devtable_hdr equ 0x1510 +_ideif_prnt_devtable_l1 equ 0x12E1 +_ideif_prnt_devtable_l1_e2 equ 0x13A7 +_ideif_prnt_devtable_l1_es equ 0x1326 +_ideif_prnt_devtable_l1_ms equ 0x13A4 +_ideif_prnt_devtable_l1_nxt equ 0x12EE +_ideif_prnt_devtable_l1_s00 equ 0x1314 +_ideif_prnt_devtable_l1_s01 equ 0x1319 +_ideif_prnt_devtable_l1_s02 equ 0x131E +_ideif_prnt_devtable_l1_sFF equ 0x1323 +_ideif_prnt_devtable_l1_sel equ 0x12EC +_ideif_prnt_devtable_master equ 0x1574 +_ideif_prnt_devtable_s00 equ 0x1548 +_ideif_prnt_devtable_s01 equ 0x1553 +_ideif_prnt_devtable_s02 equ 0x155E +_ideif_prnt_devtable_sFF equ 0x1569 +_ideif_prnt_devtable_slave equ 0x157C +_read_bcd_invalid equ 0x147 +_shift4 equ 0x1C9C +beep equ 0xD17 +beep_loop equ 0xD19 +beep_pause equ 0xD2F +dasm_00 equ 0x91C +dasm_01 equ 0xC08 +dasm_02 equ 0x9A2 +dasm_03 equ 0xBDA +dasm_08 equ 0xA1F +dasm_09 equ 0xBAD +dasm_0A equ 0x984 +dasm_0B equ 0xBF1 +dasm_10 equ 0x964 +dasm_12 equ 0x9AD +dasm_18 equ 0x927 +dasm_1A equ 0x98E +dasm_20 equ 0x941 +dasm_22 equ 0xC4E +dasm_27 equ 0x9E7 +dasm_28 equ 0x93A +dasm_2A equ 0xC1F +dasm_2F equ 0x9EB +dasm_30 equ 0x932 +dasm_32 equ 0x9B8 +dasm_37 equ 0x9F7 +dasm_38 equ 0x92B +dasm_3A equ 0x998 +dasm_3F equ 0x9F3 +dasm_76 equ 0x9FB +dasm_80C6 equ 0xA78 +dasm_BE equ 0xA15 +dasm_C3 equ 0x920 +dasm_C88E equ 0xA9E +dasm_C9 equ 0x970 +dasm_CD equ 0x96A +dasm_D9 equ 0xA2C +dasm_DD equ 0x952 +dasm_DD_01 equ 0xC0F +dasm_DD_09 equ 0xBC8 +dasm_DD_22 equ 0xC64 +dasm_DD_23 equ 0xBDF +dasm_DD_2A equ 0xC36 +dasm_DD_2B equ 0xBF6 +dasm_DD_34 equ 0xB78 +dasm_DD_35 equ 0xB95 +dasm_DD_86 equ 0xA80 +dasm_DD_8E equ 0xAA6 +dasm_DD_96 equ 0xAC9 +dasm_DD_9E equ 0xAE9 +dasm_DD_A6 equ 0xB0A +dasm_DD_AE equ 0xB41 +dasm_DD_B6 equ 0xB26 +dasm_DD_BE equ 0xB5D +dasm_DD_E1 equ 0xCB6 +dasm_DD_E3 equ 0xA3C +dasm_DD_E5 equ 0xCA0 +dasm_DD_F9 equ 0xC86 +dasm_E1 equ 0xCB0 +dasm_E3 equ 0xA30 +dasm_E5 equ 0xC9A +dasm_E9 equ 0x949 +dasm_ED_42 equ 0xBBF +dasm_ED_43 equ 0xC5A +dasm_ED_44 equ 0x9EF +dasm_ED_45 equ 0x97A +dasm_ED_46 equ 0xA06 +dasm_ED_4A equ 0xBB6 +dasm_ED_4B equ 0xC2B +dasm_ED_4D equ 0x975 +dasm_ED_56 equ 0xA0B +dasm_ED_5E equ 0xA10 +dasm_ED_A0 equ 0xA54 +dasm_ED_A1 equ 0xA66 +dasm_ED_A8 equ 0xA5D +dasm_ED_A9 equ 0xA6F +dasm_ED_B0 equ 0xA58 +dasm_ED_B1 equ 0xA6A +dasm_ED_B8 equ 0xA61 +dasm_ED_B9 equ 0xA73 +dasm_F3 equ 0xA00 +dasm_F9 equ 0xC7C +dasm_FB equ 0xA03 +dasm_FD equ 0x95B +dasm_FD_01 equ 0xC17 +dasm_FD_09 equ 0xBD1 +dasm_FD_22 equ 0xC70 +dasm_FD_23 equ 0xBE8 +dasm_FD_2A equ 0xC42 +dasm_FD_2B equ 0xBFF +dasm_FD_34 equ 0xB84 +dasm_FD_35 equ 0xBA1 +dasm_FD_86 equ 0xA8F +dasm_FD_8E equ 0xAB5 +dasm_FD_96 equ 0xAD5 +dasm_FD_9E equ 0xAF7 +dasm_FD_A6 equ 0xB16 +dasm_FD_AE equ 0xB4D +dasm_FD_B6 equ 0xB31 +dasm_FD_BE equ 0xB68 +dasm_FD_E1 equ 0xCBE +dasm_FD_E3 equ 0xA48 +dasm_FD_E5 equ 0xCA8 +dasm_FD_F9 equ 0xC90 +dasm_FF equ 0x97F +dasm_UU equ 0xCC6 +dasm_UW equ 0xCCA +dasm__AND equ 0xB05 +dasm__CP equ 0xB59 +dasm__DEC equ 0xB90 +dasm__ED_47 equ 0x9D7 +dasm__ED_4F equ 0x9DF +dasm__ED_57 equ 0x9C7 +dasm__ED_5F equ 0x9CF +dasm__INC equ 0xB73 +dasm__LD equ 0x9C3 +dasm__OR equ 0xB22 +dasm__SBC equ 0xAE1 +dasm__SUB equ 0xAC4 +dasm__XOR equ 0xB3C +dasm_opcode_table equ 0x4C4 +dasm_print16hex_addr equ 0x2F1 +dasm_print8hex equ 0x309 +dasm_printFlags_table equ 0xCCF +dasm_printRegister8_table equ 0xCDF +dasm_printRegister8_table_HL equ 0xCFF +dasm_printRegisterIX_table equ 0xCE7 +dasm_printRegisterIY_table equ 0xCEF +dasm_printRegisterSP_table equ 0xCF7 +disassemble equ 0x1B5 +disassemble_continue equ 0x29B +disassemble_err equ 0x28B +disassemble_next equ 0x1B9 +disassemble_print_opcode_params_end equ 0x288 +disassemble_print_opcode_params_loop equ 0x234 +disassemble_print_opcode_raw equ 0x1F6 +disassemble_print_opcode_raw_fill equ 0x20A +disassemble_table_first_match equ 0x2CD +disassemble_table_found equ 0x2E7 +disassemble_table_notfound equ 0x2EB +disassemble_table_seek equ 0x2A9 +disassemble_table_seek_loop equ 0x2AD +dump_pretty equ 0x16C9 +dump_pretty_ascii equ 0x16F3 +dump_pretty_ascii_cont equ 0x1711 +dump_pretty_ascii_loop equ 0x16FB +dump_pretty_ascii_none equ 0x170C +dump_pretty_col equ 0x16E6 +dump_pretty_end equ 0x1723 +dump_pretty_nextrow equ 0x1717 +dump_pretty_row equ 0x16D1 +ide_printerror equ 0xE04 +ide_readsector_256 equ 0xD83 +ide_readsector_256_done equ 0xDB2 +ide_readsector_256_waitloop equ 0xD85 +ide_readsector_512_inv equ 0xDB3 +ide_readsector_512_inv_waitloop equ 0xDB8 +ide_readsector_timeout equ 0xDEE +ide_regread_8 equ 0xD65 +ide_regwrite_8 equ 0xD49 +ide_reset equ 0xD3C +ide_writesector_256 equ 0xE03 +ideif_get_drv_pointer equ 0x1497 +ideif_init_all equ 0x14AB +ideif_init_devtable equ 0x12B5 +ideif_init_drive equ 0x13C8 +ideif_prnt_devtable equ 0x12D3 +iic_init equ 0x15DD +iic_read_ack equ 0x161C +iic_receive_buffer equ 0x15AE +iic_receive_buffer_done equ 0x15D1 +iic_receive_buffer_err equ 0x15D7 +iic_receive_buffer_loop equ 0x15BF +iic_receive_byte equ 0x16A2 +iic_receive_byte_loop equ 0x16AF +iic_send_ack equ 0x1642 +iic_send_buffer equ 0x1584 +iic_send_buffer_done equ 0x15A2 +iic_send_buffer_err equ 0x15A8 +iic_send_buffer_loop equ 0x1594 +iic_send_byte equ 0x167C +iic_send_byte_loop equ 0x1688 +iic_send_ebit equ 0x15FB +iic_send_nack equ 0x165F +iic_send_sbit equ 0x15E6 mon_var_template equ 0x44 -mon_var_template_end equ 0x6E -param_01 equ 0x4D7 -param_02 equ 0x4FE -param_03 equ 0x51B -param_03_done equ 0x553 -param_03_neg equ 0x53C -param_04 equ 0x557 -param_04_i equ 0x567 -param_05 equ 0x56D -param_06 equ 0x57A -param_07 equ 0x594 -param_08 equ 0x5A1 -param_09 equ 0x5B6 -param_09_0A equ 0x5BC -param_0A equ 0x5AD -param_10 equ 0x5CB -param_11 equ 0x5DB -param_11_12 equ 0x5EA -param_11_12_all equ 0x60A -param_11_12_def equ 0x5FD -param_11_12_ix equ 0x602 -param_11_12_iy equ 0x607 -param_12 equ 0x5E3 -param_13 equ 0x61B -param_80 equ 0x63A -param_80_seek equ 0x641 -param_81 equ 0x631 -param_comma equ 0x675 -param_printRegister equ 0x650 -param_printRegisterA equ 0x66E -param_printRegisterHL equ 0x666 -print_a_hex equ 0x2E7 -print_char equ 0x2B7 -print_clear equ 0x2CA -print_newLine equ 0x2D1 -print_str equ 0x2BF -print_str_end equ 0x2C9 -print_str_fixed equ 0x1358 -print_wait_out equ 0x2DC -read_char equ 0x2F8 -read_lba_sector equ 0x1256 -str_dev_notfound equ 0x12B3 -str_dev_ready equ 0x129D -str_dev_ready2 equ 0x12AA -str_dev_waitready equ 0x1289 -str_error_start equ 0x11A1 -str_error_start1 equ 0x11BE -str_error_start2 equ 0x11C7 -str_error_time equ 0x11D0 -var_buffer equ 0x4029 +mon_var_template_end equ 0x370 +param_01 equ 0x317 +param_02 equ 0x33E +param_03 equ 0x35B +param_03_done equ 0x393 +param_03_neg equ 0x37C +param_04 equ 0x397 +param_04_i equ 0x3A7 +param_05 equ 0x3AD +param_06 equ 0x3BA +param_07 equ 0x3D4 +param_08 equ 0x3E1 +param_09 equ 0x3F6 +param_09_0A equ 0x3FC +param_0A equ 0x3ED +param_10 equ 0x40B +param_11 equ 0x41B +param_11_12 equ 0x42A +param_11_12_all equ 0x44A +param_11_12_def equ 0x43D +param_11_12_ix equ 0x442 +param_11_12_iy equ 0x447 +param_12 equ 0x423 +param_13 equ 0x45B +param_80 equ 0x47A +param_80_seek equ 0x481 +param_81 equ 0x471 +param_comma equ 0x4B5 +param_printRegister equ 0x490 +param_printRegisterA equ 0x4AE +param_printRegisterHL equ 0x4A6 +print_a_hex equ 0x107 +print_bcd equ 0x119 +print_char equ 0xD7 +print_clear equ 0xEA +print_newLine equ 0xF1 +print_str equ 0xDF +print_str_end equ 0xE9 +print_str_fixed equ 0x1763 +print_wait_out equ 0xFC +read_bcd equ 0x131 +read_char equ 0x11F +read_lba_sector equ 0x14BE +str_dev_done equ 0x1508 +str_dev_waitready equ 0x14F0 +str_error_start equ 0xE37 +str_error_start1 equ 0xE54 +str_error_start2 equ 0xE5D +str_error_time equ 0xE66 +str_post_apu equ 0x1DFC +str_post_ide_30 equ 0x1DAB +str_post_ide_40 equ 0x1DC6 +str_post_nd equ 0x1E32 +str_post_ok equ 0x1E6A +str_post_pio equ 0x1DE1 +str_post_rtc equ 0x1E17 +str_post_rtc_iv equ 0x1E40 +var_apu_present equ 0x400A +var_buffer equ 0x402B var_buffer_len equ 0x4000 var_bytes_count equ 0x411A var_curserchar equ 0x4006 @@ -361,6 +459,7 @@ var_curseron equ 0x4005 var_curserstate equ 0x4004 var_curserx equ 0x4002 var_cursery equ 0x4003 +var_idebuffer equ 0x402C var_last_char equ 0x4001 var_opcode equ 0x4114 var_opcode_length equ 0x4116 @@ -369,26 +468,6 @@ var_opcode_start equ 0x4110 var_opcode_string equ 0x4117 var_opcode_table equ 0x4112 var_opcode_x equ 0x4115 -var_ps2mem equ 0x4019 -var_scratch equ 0x4009 -xmodem_ack equ 0x107B -xmodem_await_conn equ 0xF34 -xmodem_end equ 0xFDF -xmodem_err equ 0xFA5 -xmodem_init equ 0xF06 -xmodem_int equ 0xFE6 -xmodem_int_cont equ 0x1005 -xmodem_nak equ 0x1089 -xmodem_out equ 0x1037 -xmodem_packet equ 0xF3F -xmodem_packet_EOT equ 0xF9D -xmodem_packet_get equ 0xF51 -xmodem_packet_get_crc equ 0xF8A -xmodem_packet_get_data equ 0xF7B -xmodem_read_timeount equ 0x03 -xmodem_read_wait equ 0x100A -xmodem_read_wait_loop equ 0x1018 -xmodem_read_wait_timeout equ 0x1035 -xmodem_wait equ 0x1097 -xmodem_wait_1 equ 0x109D -xmodem_wait_out equ 0x103D +var_pio_present equ 0x4009 +var_ps2mem equ 0x401B +var_scratch equ 0x400B diff --git a/OperatingSystem/software/include/fat16.s b/OperatingSystem/software/include/fat16.s index 767115a..c37c945 100644 --- a/OperatingSystem/software/include/fat16.s +++ b/OperatingSystem/software/include/fat16.s @@ -1,21 +1,55 @@ ; VARS - MEM_FAT_RESERVED .EQU MEM_IDE_BASE + 10 ; Reserved sectors (2byte) - MEM_FAT_AMOUNT .EQU MEM_IDE_BASE + 12 ; Amount of FATs (1byte) - MEM_FAT_SECTORS .EQU MEM_IDE_BASE + 13 ; Length of FAT (2byte) + phase MEM_IDE_FSBUFFER +MEM_FAT_RESERVED: ; Reserved sectors (2byte) + defs 2 +MEM_FAT_AMOUNT: ; Amount of FATs (1byte) + defs 1 +MEM_FAT_SECTORS: ; Length of FAT (2byte) + defs 2 +MEM_FAT_COUNT1: ; Counter Var for reading FAT (2byte) + defs 1 +MEM_FAT_TMPPOINTER: ; Temporary working pointer + defs 4 +MEM_FAT_TMPPOINTER1: ; Temporary working pointer + defs 4 +MEM_FAT_TMPFNAME: ; Temporary filename + defs 16 - MEM_FAT_COUNT1 .EQU MEM_IDE_BASE + 15 ;Counter Var for reading FAT (2byte) +MEM_FAT_OF0_CCLUST: ;Current cluster of file + defw 0 +MEM_FAT_OF0_FATSEC: ;Current sector in FAT + defs 4 +MEM_FAT_OF0_DATSEC: ;Current sector in Data + defs 4 +MEM_FAT_OF0_DATREM: ;Remaining sector in Data + defs 2 + + + dephase ;------------------------------------- ; Get FAT Root-Table position ;------------------------------------- fat_get_root_table: call fat_reset_pointer ;reset fat pointer + + ;call fat_print_dbg ; Load first sector on active partition - LD HL, MEM_IDE_PARTITION ; pointer to LBA address + LD HL, MEM_IDE_POINTER ; pointer to LBA address LD A,1 ;read 1 sector call read_lba_sector + ; check for valid Boot sector + ld a,(MEM_IDE_BUFFER) + cp 0xEB ;first byte should be 0xEB + jp nz, _fat_get_root_table_invalid + + ;debug sector + ;ld hl, MEM_IDE_BUFFER + ;ld b,20 + ;call dump_pretty + ; Read and store FS Properties LD IX,MEM_IDE_BUFFER LD A,(IX+0x0E) @@ -53,35 +87,54 @@ _fat_get_root_table_loop: ; multiply call _fat_math_sector_add_16 ret +_fat_get_root_table_invalid: + call PRINTINLINE + db 10,13,"Cannot find boot sector.",10,13,0 + call ideif_get_drv_pointer + ld (ix+0),0x02 + ret + ;------------------------------------- ; Print current fat directory of MEM_IDE_POINTER ;------------------------------------- fat_print_directory: - LD A,10 ;New line - CALL print_char - LD A,13 - CALL print_char - + LD DE,(MEM_FAT_SECTORS) LD (MEM_FAT_COUNT1),DE LD HL,MEM_IDE_POINTER ;read first sector LD B,1 call read_lba_sector + call PRINTINLINE + db 10,13," Filename Cluster Size",10,13,0 + LD HL, MEM_IDE_BUFFER ;set buffer start LD C,16 ;set entries counter _fat_print_directory_loop: ;loop over each entry (32byte) LD A,(HL) ; check first byte PUSH HL ;backup start of entry + POP IX + PUSH HL ;ignore unwanted entries CP 0x41 ;skip invisible - JR Z, _fat_print_directory_loop_next + JP Z, _fat_print_directory_loop_next CP 0xE5 ;skip deleted - JR Z, _fat_print_directory_loop_next + JP Z, _fat_print_directory_loop_next CP 0x00 ;reached end JP Z, _fat_print_directory_loop_break + + ;check file attribute + ld a,(IX+0x0B) + cp 0x10 ;if subdirectors + jp z, _fat_print_directory_dir ;print dir + ;else print file +_fat_print_directory_loop_file ;print filename + ld a,' ' + call print_char + ld a,' ' + call print_char LD B,8 call print_str_fixed ld A,'.' @@ -89,14 +142,49 @@ _fat_print_directory_loop: ;loop over each entry (32byte) LD B,3 call print_str_fixed - LD A,(HL) ; print attribute - call print_char + call PRINTINLINE + db " 0x",0 + ;first cluster number + ld a,(ix+0x1B) + call print_a_hex + ld a,(ix+0x1A) + call print_a_hex + call PRINTINLINE + db " 0x",0 + ld a,(ix+0x1F) + call print_a_hex + ld a,(ix+0x1E) + call print_a_hex + ld a,(ix+0x1D) + call print_a_hex + ld a,(ix+0x1C) + call print_a_hex LD A,10 ;New line CALL print_char LD A,13 CALL print_char - + jr _fat_print_directory_loop_next +_fat_print_directory_dir + ld a,'D' + call print_char + ld a,' ' + call print_char + LD B,8 + call print_str_fixed + call PRINTINLINE + db " 0x",0 + ;first cluster number + ld a,(ix+0x1B) + call print_a_hex + ld a,(ix+0x1A) + call print_a_hex + + LD A,10 ;New line + CALL print_char + LD A,13 + CALL print_char + jr _fat_print_directory_loop_next _fat_print_directory_loop_next: ; read next entry DEC C ;next sector after 32 entries @@ -130,12 +218,12 @@ _fat_print_directory_loop_next_sector: ; end fo sector. read next sector from d _fat_print_directory_loop_break POP HL _fat_print_directory_loop_break_dirty - ld hl, [str_sum] - call print_str ;print - ld a,c - call print_a_hex - ld hl, [str_files] - call print_str ;print + ; ld hl, [str_sum] + ; call print_str ;print + ; ld a,c + ; call print_a_hex + ; ld hl, [str_files] + ; call print_str ;print ret ;------------------------------------- @@ -145,7 +233,7 @@ _fat_print_directory_loop_break_dirty ;------------------------------------- fat_lfs: PUSH DE - LD HL,MEM_IDE_BASE + 17 ; prepare filename + LD HL,[MEM_FAT_TMPFNAME] ; prepare filename CALL format_filename_fat16 LD A,16 ;init counter for FAT sectors @@ -216,27 +304,79 @@ _fat_lfs_loop_compare_match: ; 32 Bit addition to pointer ; HL has value _fat_math_sector_add_16: - LD IX,MEM_IDE_POINTER; LOAD IX to sector pointer in memory - LD A,L - ADD A,(IX+3) - LD (IX+3),A - JR NC, _fat_math_sector_add_16_2 ;if no carry, continue - LD A,1 - ADD A,(IX+2) -_fat_math_sector_add_16_2: - LD A,h - ADD A,(IX+2) - LD (IX+2),A - RET NC ;done when no carry - LD A,1 - ADD A,(IX+1) - LD (IX+1),A - RET + ld (MEM_FAT_TMPPOINTER), hl + xor a + ld (MEM_FAT_TMPPOINTER+2),a + ld (MEM_FAT_TMPPOINTER+3),a -; reset LBA pointer to first sector in partition + ld de,[MEM_FAT_TMPPOINTER] + ld bc,[MEM_IDE_POINTER] + call _fat_math_add32 + ret + + ;bc contains pointer to a (also result) + ;de contains pointer to b +_fat_math_add32 + push hl + push bc + push de + ld a,(de) ; load lower 16bit for B int from (DE) to HL + ld l,a + inc de + ld a,(de) + ld h,a + inc de + ; HL, DE dirty + ld a,(bc) ; load lower 16bit for A int from (BC) to DE + ld e,a + inc bc + ld a,(bc) + ld d,a + ; HL now contains A, DE now contains D + add hl,de ;add lower bytes, store carry + pop de ;restore pointers + pop bc ;both now cointain first byte of long-value + ld a,l ;store lower result in (bc) + ld (bc),a + inc bc + ld a,h + ld (bc),a + inc bc + inc de ;also increment de to next byte + inc de + ; DE and HL now start at the upper byte + push bc + push de + ld a,(de) ; load upper 16bit for B + ld l,a + inc de + ld a,(de) + ld h,a + inc de + ld a,(bc) ; load upper 16bit for A + ld e,a + inc bc + ld a,(bc) + ld d,a + adc hl,de ;add upper bytes, store carry + pop de + pop bc + ld a,l ;store lower result in (bc) + ld(bc),a + inc bc + ld a,h + ld(bc),a + pop hl + ret + +; reset LBA pointer to first sector in selected partition fat_reset_pointer: - LD HL,MEM_IDE_PARTITION - LD DE,MEM_IDE_POINTER + call ideif_get_drv_pointer + inc ix + inc ix + push ix + pop hl ;copy poiter to hl + ld de, MEM_IDE_POINTER jr fat_copy_lba_pointer ; resets LBA pointer (4-byte) to partition start @@ -318,5 +458,5 @@ _format_filename_fat16_loop_copy: str_file_notfound: db "File not found!",13,10,0 - str_file_found: +str_file_found: db " File located!",13,10,0 \ No newline at end of file diff --git a/OperatingSystem/software/include/fat16_file.s b/OperatingSystem/software/include/fat16_file.s new file mode 100644 index 0000000..2526a51 --- /dev/null +++ b/OperatingSystem/software/include/fat16_file.s @@ -0,0 +1,69 @@ + + +;1. find sector for given cluster +;2. read sector +;3. store first data sector to MEM_FAT_OF0_DATSEC +;4. set MEM_FAT_OF0_DATREM to amount uf sectors per cluster +;5. find next cluster in FAt and update MEM_FAT_OF0_CCLUST + + +; gets sector in FAT table for the cluster stored in MEM_FAT_OF0_CCLUST +; store result in MEM_FAT_OF0_FATSEC +; stores next cluster in MEM_FAT_OF0_CCLUST +fat_getfatsec: + ld HL,(MEM_FAT_OF0_CCLUST) ;load cluster + ;each sector contains 256 clusters + ;first 8bits are not needed (/256) + + ld a,h ;divide by 256 + ld l,a + xor a + ld h,a + + ld bc,(MEM_FAT_RESERVED) ;add reserved sectors + add hl,bc + ld(MEM_FAT_OF0_FATSEC+0),hl;store sector to MEM_FAT_TMPPOINTER1 + xor a + ld(MEM_FAT_OF0_FATSEC+2),a + ld(MEM_FAT_OF0_FATSEC+3),a + + call ideif_get_drv_pointer + inc ix + inc ix + push ix + pop de ;copy poiter to hl + ld bc,[MEM_FAT_OF0_FATSEC] + call _fat_math_add32 ;MEM_FAT_OF0_FATSEC now contains the correct sector + ;in the FAT + + call fat_print_dbg + + ;read FAT sector + ld hl,MEM_FAT_OF0_FATSEC ;read next sector + ld b,1 + call read_lba_sector + + ld hl, MEM_IDE_BUFFER + ld b,20 + call dump_pretty + + ;calculate offset address + ld a,(MEM_FAT_OF0_CCLUST) + RLA ;shift to left (x2) + ld l, a + ld a,0 + RLA ;shift in carry flag + ld h,a + ld de,MEM_IDE_BUFFER + add hl,de + ;copy pointer + ld de,MEM_FAT_OF0_CCLUST + ldi ;copy byte for next cluster from FAT + ldi + + + call fat_print_dbg + + ret + ;store data + diff --git a/OperatingSystem/software/test.asm b/OperatingSystem/software/test.asm index 20b4555..8596186 100644 --- a/OperatingSystem/software/test.asm +++ b/OperatingSystem/software/test.asm @@ -1,141 +1,170 @@ .include "extern_symbols.s" ;include monitor symbols. - org 0xB000 -;Testing code + org 0x8000 - ;LD HL,MEM_IDE_BUFFER - ;LD B,32 - ;call dump_pretty - call find_partition - ;call fat_get_root_table - ;call fat_print_directory +sel_dsk: + call ideif_drv_sel + call fat_print_dbg + ret - call fat_get_root_table - LD DE, [str1] - CALL fat_lfs + org 0x8010 + call fat_print_dbg + ret + + org 0x8020 + call fat_print_directory + ret + + org 0x8030 + ld hl,0x0006 + ld (MEM_FAT_OF0_CCLUST),hl + call fat_getfatsec + ret + +fat_print_dbg: + call PRINTINLINE + db 10,13,"PTR.MEM_IDE_POINTER: 0x",0 + ld ix,MEM_IDE_POINTER + call print_32_hex + call PRINTINLINE + db " | PTR.MEM_IDE_PARTITION: 0x",0 + ld ix,MEM_IDE_PARTITION + call print_32_hex + + call PRINTINLINE + db 10,13,"PTR.MEM_FAT_TMPPOINTER: 0x",0 + ld ix,MEM_FAT_TMPPOINTER + call print_32_hex + call PRINTINLINE + db " | PTR.MEM_FAT_TMPPOINTER1: 0x",0 + ld ix,MEM_FAT_TMPPOINTER1 + call print_32_hex + + call PRINTINLINE + db 10,13,"VAL.MEM_FAT_RESERVED: 0x",0 + ld ix,MEM_FAT_RESERVED + call print_16_hex + call PRINTINLINE + db " | VAL.MEM_FAT_AMOUNT: 0x",0 + ld a,(MEM_FAT_AMOUNT) + call print_a_hex + + call PRINTINLINE + db 10,13,"VAL.MEM_FAT_SECTORS: 0x",0 + ld ix,MEM_FAT_SECTORS + call print_16_hex + call PRINTINLINE + db " | VAL.MEM_FAT_COUNT1: 0x",0 + ld a,(MEM_FAT_COUNT1) + call print_a_hex + + call PRINTINLINE + db 10,13,"VAL.MEM_FAT_OF0_CCLUST: 0x",0 + ld ix,MEM_FAT_OF0_CCLUST + call print_16_hex + call PRINTINLINE + db " | PTR.MEM_FAT_OF0_FATSEC: 0x",0 + ld ix,MEM_FAT_OF0_FATSEC + call print_32_hex + + call PRINTINLINE + db 10,13,"VAL.MEM_FAT_OF0_DATSEC: 0x",0 + ld ix,MEM_FAT_OF0_DATSEC + call print_32_hex + call PRINTINLINE + db " | PTR.MEM_FAT_OF0_DATREM: 0x",0 + ld ix,MEM_FAT_OF0_DATREM + call print_16_hex + + call print_newLine + ret + +print_32_hex: + ld a,(ix+3) + call print_a_hex + ld a,(ix+2) + call print_a_hex + ld a,(ix+1) + call print_a_hex + ld a,(ix+0) + call print_a_hex + ret + +print_16_hex: + ld a,(ix+1) + call print_a_hex + ld a,(ix+0) + call print_a_hex + ret + +; a contains drive to select +; populate fs vars as well +ideif_drv_sel: + ld (MEM_IDE_SELECTED),a + push af + call ideif_get_drv_pointer ;test if drive is marked as available + ld a,(ix+0) + or a + jp nz, _ideif_drv_sel_fail ;if not-> fail - JP PROMPT_BEGIN + call fat_get_root_table ;else get root table + ;backup tmp pointer + ld hl,(MEM_IDE_POINTER) + ld de,(MEM_IDE_PARTITION) ;use MEM_IDE_PARTITION to backup the pointer + call fat_copy_lba_pointer + ld hl,[_ideif_drv_sel_pstr] ;print success message + call print_str + pop af + add 69 + call print_char + ld hl,[_ideif_drv_sel_sstr0] + call print_str + ret +_ideif_drv_sel_fail: + ld hl,[_ideif_drv_sel_pstr] + call print_str + pop af + add 69 + call print_char + ld hl,[_ideif_drv_sel_fstr0] + call print_str + LD DE,0x20 + LD BC,0x70 + CALL beep + ret -str1: - db "ILLUSION.PSG",0 -str2: - db "HALLOWLT.TXT",0 -str3: - db "TEST",0 -str4: - db ".ORG",0 +_ideif_drv_sel_pstr: + db 10,13,"Drive ",0 +_ideif_drv_sel_fstr0: + db ": not ready",10,13,0 +_ideif_drv_sel_sstr0: + db ": selected",10,13,0 +_ideif_drv_sel_syn: + db 10,13,"Invalid drive letter",10,13,0 +.include "fat16.s" ;include monitor symbols. +.include "fat16_file.s" ;include monitor symbols. -delay_small: - PUSH AF - POP AF - PUSH AF - POP AF - RET - -find_partition: - ;read bootsector - LD A,1 ;read 1 sector - LD B,IDE_REG_SECTOR - CALL ide_regwrite_8 - - LD A,1 ;read sector 0 - LD B,IDE_REG_SSECTOR - CALL ide_regwrite_8 - - LD A,0 ;read cylinder 0 - LD B,IDE_REG_LCYL - CALL ide_regwrite_8 - LD A,0 - LD B,IDE_REG_HCYL - CALL ide_regwrite_8 - - LD A,10100000b ;read head 0 - LD B,IDE_REG_HEAD - CALL ide_regwrite_8 - - LD A,IDE_CMD_READSEC ;send read command - LD B,IDE_REG_CMDSTS - CALL ide_regwrite_8 - - LD HL,MEM_IDE_BUFFER ;set read/write buffer start address - call ide_readsector_512_inv ;read 256 words from device - - LD B,4 ;Partition table length - LD C,0 ;Partition ID counter - LD IX,MEM_IDE_BUFFER+446 ;Load offest of first partition table entry -find_partition_loop: - LD A,(IX+4) ;load status byte - OR A - JP NZ, find_partition_process ;If not zero, jump to print function - jp find_partition_next - -find_partition_next: - LD A,10 ;New line - CALL print_char - LD A,13 - CALL print_char - LD DE,16 - ADD IX,DE - DJNZ find_partition_loop - RET - -find_partition_process: ; process table entry - ld hl, [str_part_seek_1] - call print_str ;print - LD A,(IX+0x04) ;load type - call print_a_hex - LD A,(IX+0x04) ;load type - CP 0x0E - JR NZ, find_partition_next - - ld hl, [str_part_seek_2] - call print_str ;print - ld hl, [str_part_seek_3] - call print_str ;print - - LD A,(IX+0x08) ;load start LBA - LD (MEM_IDE_PARTITION+3),A - LD A,(IX+0x09) ;load start LBA - LD (MEM_IDE_PARTITION+2),A - LD A,(IX+0x0A) ;load start LBA - LD (MEM_IDE_PARTITION+1),A - LD A,(IX+0x0B) ;load start LBA - LD (MEM_IDE_PARTITION+0),A - - LD A,(MEM_IDE_PARTITION+3) - call print_a_hex - LD A,(MEM_IDE_PARTITION+2) - call print_a_hex - LD A,(MEM_IDE_PARTITION+1) - call print_a_hex - LD A,(MEM_IDE_PARTITION+0) - call print_a_hex - ld hl, [str_part_seek_4] - call print_str ;print - LD A,(IX+0x0C) ;load count LBA - call print_a_hex - LD A,(IX+0x0D) ;load count LBA - call print_a_hex - LD A,(IX+0x0E) ;load count LBA - call print_a_hex - LD A,(IX+0x0F) ;load count LBA - call print_a_hex - LD A,10 ;New line - CALL print_char - LD A,13 - CALL print_char - RET - -str_part_seek_1: - db "- Type: 0x",0 -str_part_seek_2: - db " State: ",0 -str_part_seek_3: - db " LBA: 0x",0 -str_part_seek_4: - db " Len: 0x",0 -str_sum: - db "------------",10,13,0 -str_files: - db " Files",10,13,0 - -.include "include/fat16.s" \ No newline at end of file +;------------------------------------------------------------------------------ +; PRINTINLINE +; +; String output function +; +; Prints in-line data (bytes immediately following the PRINTINLINE call) +; until a string terminator is encountered (0 - null char). +;------------------------------------------------------------------------------ +PRINTINLINE: + EX (SP),HL ; PUSH HL and put RET ADDress into HL + PUSH AF + PUSH BC +nxtILC: + LD A,(HL) + CP 0 + JR Z,endPrint + CALL print_char + INC HL + JR nxtILC +endPrint: + INC HL ; Get past "null" terminator + POP BC + POP AF + EX (SP),HL ; PUSH new RET ADDress on stack and restore HL + RET \ No newline at end of file diff --git a/OperatingSystem/software/test_old.asm b/OperatingSystem/software/test_old.asm new file mode 100644 index 0000000..20b4555 --- /dev/null +++ b/OperatingSystem/software/test_old.asm @@ -0,0 +1,141 @@ +.include "extern_symbols.s" ;include monitor symbols. + org 0xB000 +;Testing code + + ;LD HL,MEM_IDE_BUFFER + ;LD B,32 + ;call dump_pretty + call find_partition + ;call fat_get_root_table + ;call fat_print_directory + + call fat_get_root_table + LD DE, [str1] + CALL fat_lfs + + JP PROMPT_BEGIN + +str1: + db "ILLUSION.PSG",0 +str2: + db "HALLOWLT.TXT",0 +str3: + db "TEST",0 +str4: + db ".ORG",0 + +delay_small: + PUSH AF + POP AF + PUSH AF + POP AF + RET + +find_partition: + ;read bootsector + LD A,1 ;read 1 sector + LD B,IDE_REG_SECTOR + CALL ide_regwrite_8 + + LD A,1 ;read sector 0 + LD B,IDE_REG_SSECTOR + CALL ide_regwrite_8 + + LD A,0 ;read cylinder 0 + LD B,IDE_REG_LCYL + CALL ide_regwrite_8 + LD A,0 + LD B,IDE_REG_HCYL + CALL ide_regwrite_8 + + LD A,10100000b ;read head 0 + LD B,IDE_REG_HEAD + CALL ide_regwrite_8 + + LD A,IDE_CMD_READSEC ;send read command + LD B,IDE_REG_CMDSTS + CALL ide_regwrite_8 + + LD HL,MEM_IDE_BUFFER ;set read/write buffer start address + call ide_readsector_512_inv ;read 256 words from device + + LD B,4 ;Partition table length + LD C,0 ;Partition ID counter + LD IX,MEM_IDE_BUFFER+446 ;Load offest of first partition table entry +find_partition_loop: + LD A,(IX+4) ;load status byte + OR A + JP NZ, find_partition_process ;If not zero, jump to print function + jp find_partition_next + +find_partition_next: + LD A,10 ;New line + CALL print_char + LD A,13 + CALL print_char + LD DE,16 + ADD IX,DE + DJNZ find_partition_loop + RET + +find_partition_process: ; process table entry + ld hl, [str_part_seek_1] + call print_str ;print + LD A,(IX+0x04) ;load type + call print_a_hex + LD A,(IX+0x04) ;load type + CP 0x0E + JR NZ, find_partition_next + + ld hl, [str_part_seek_2] + call print_str ;print + ld hl, [str_part_seek_3] + call print_str ;print + + LD A,(IX+0x08) ;load start LBA + LD (MEM_IDE_PARTITION+3),A + LD A,(IX+0x09) ;load start LBA + LD (MEM_IDE_PARTITION+2),A + LD A,(IX+0x0A) ;load start LBA + LD (MEM_IDE_PARTITION+1),A + LD A,(IX+0x0B) ;load start LBA + LD (MEM_IDE_PARTITION+0),A + + LD A,(MEM_IDE_PARTITION+3) + call print_a_hex + LD A,(MEM_IDE_PARTITION+2) + call print_a_hex + LD A,(MEM_IDE_PARTITION+1) + call print_a_hex + LD A,(MEM_IDE_PARTITION+0) + call print_a_hex + ld hl, [str_part_seek_4] + call print_str ;print + LD A,(IX+0x0C) ;load count LBA + call print_a_hex + LD A,(IX+0x0D) ;load count LBA + call print_a_hex + LD A,(IX+0x0E) ;load count LBA + call print_a_hex + LD A,(IX+0x0F) ;load count LBA + call print_a_hex + LD A,10 ;New line + CALL print_char + LD A,13 + CALL print_char + RET + +str_part_seek_1: + db "- Type: 0x",0 +str_part_seek_2: + db " State: ",0 +str_part_seek_3: + db " LBA: 0x",0 +str_part_seek_4: + db " Len: 0x",0 +str_sum: + db "------------",10,13,0 +str_files: + db " Files",10,13,0 + +.include "include/fat16.s" \ No newline at end of file diff --git a/OperatingSystem/software/zout/test.bin b/OperatingSystem/software/zout/test.bin index 0f69597..2ee5260 100644 Binary files a/OperatingSystem/software/zout/test.bin and b/OperatingSystem/software/zout/test.bin differ diff --git a/OperatingSystem/software/zout/test.hex b/OperatingSystem/software/zout/test.hex index e15ab8d..5600e75 100644 --- a/OperatingSystem/software/zout/test.hex +++ b/OperatingSystem/software/zout/test.hex @@ -1,51 +1,99 @@ -:10B00000CD38B0CD42B1110FB0CD1AB2C3990049BD -:10B010004C4C5553494F4E2E5053470048414C4CD1 -:10B020004F574C542E5458540054455354002E4FEF -:10B03000524700F5F1F5F1C93E01060ACDB3103EC5 -:10B0400001060BCDB3103E00060CCDB3103E00063A -:10B050000DCDB3103EA0060ECDB3103E20060FCD91 -:10B06000B310214150CD1D1106040E00DD21FF510A -:10B07000DD7E04B7C28CB0C37AB03E0ACDB7023EC3 -:10B080000DCDB702111000DD1910E5C92104B1CDB5 -:10B09000BF02DD7E04CDE702DD7E04FE0E20DB2153 -:10B0A0000FB1CDBF022118B1CDBF02DD7E08320540 -:10B0B00050DD7E09320450DD7E0A320350DD7E0B06 -:10B0C0003202503A0550CDE7023A0450CDE7023A39 -:10B0D0000350CDE7023A0250CDE7022121B1CDBFA6 -:10B0E00002DD7E0CCDE702DD7E0DCDE702DD7E0EBA -:10B0F000CDE702DD7E0FCDE7023E0ACDB7023E0D61 -:10B10000CDB702C92D20547970653A2030780020DF -:10B1100053746174653A2000204C42413A203078E3 -:10B1200000204C656E3A203078002D2D2D2D2D2DD0 -:10B130002D2D2D2D2D2D0A0D002046696C65730ACD -:10B140000D00CDA7B22102503E01CD5612DD2141A6 -:10B1500050DD7E0E320A50DD7E0F320B50DD7E1048 -:10B16000320C50DD7E16320D50DD7E17320E503A15 -:10B170000E50573A0D505FAF676F3A0C5047191099 -:10B18000FD16003A0A505F19CD84B2C93E0ACDB708 -:10B19000023E0DCDB702ED5B0D50ED530F50210671 -:10B1A000500601CD56122141500E107EE5FE412879 -:10B1B00026FEE52822FE00CA08B20608CD58133E36 -:10B1C0002ECDB7020603CD58137ECDB7023E0ACD71 -:10B1D000B7023E0DCDB7020D2808E111200019C3BA -:10B1E000ABB1E126002E01CD84B2ED5B0F501BED1B -:10B1F000530F507AB3CA09B22106500601CD561238 -:10B200002141500E10C3ABB1E1212AB1CDBF02796B -:10B21000CDE7022139B1CDBF02C9D5211150CDCE24 -:10B22000B23E10320F502106500601CD5612214178 -:10B23000500E10D1D5CDB8B238330D2807112000EB -:10B2400019C333B226002E01CD84B23A0F503D32DD -:10B250000F50CA65B22106500601CD561221415049 -:10B260000E10C333B2D121F3B2CDBF02C9D106084B -:10B27000CD58133E2ECDB7020603CD58132105B38A -:10B28000CDBF02C9DD2106507DDD8603DD770330A9 -:10B29000053E01DD86027CDD8602DD7702D03E01BF -:10B2A000DD8601DD7701C92102501106501800C565 -:10B2B00006000E04EDB0C1C9E5C5060B1A4F7EA904 -:10B2C00020070520F7C1E137C9C1E1373FC9060BA7 -:10B2D000E5AF772310FCE1060D1AB7C805C8FE2EAE -:10B2E000200A1378FE0538F1230518F71A7723137F -:10B2F000C3D9B246696C65206E6F7420666F756E37 -:10B3000064210D0A002046696C65206C6F636174CE -:06B310006564210D0A0036 +:07800000CD5A82CD3A80C980 +:04801000CD3A80C91C +:04802000CD8583C9BE +:10803000210600223543CDBB85C9CD0C860A0D50E3 +:1080400054522E4D454D5F4944455F504F494E5463 +:1080500045523A20202020307800DD213240CD34B6 +:1080600082CD0C8620207C20205054522E4D454D30 +:108070005F4944455F504152544954494F4E3A205C +:108080002020307800DD212E40CD3482CD0C860AB0 +:108090000D5054522E4D454D5F4641545F544D5046 +:1080A000504F494E5445523A20307800DD211D434F +:1080B000CD3482CD0C8620207C20205054522E4D71 +:1080C000454D5F4641545F544D50504F494E5445C5 +:1080D00052313A20307800DD212143CD3482CD0C5D +:1080E000860A0D56414C2E4D454D5F4641545F5218 +:1080F000455345525645443A202020307800DD2132 +:108100001743CD4D82CD0C862020202020207C20BE +:108110002056414C2E4D454D5F4641545F414D4FD9 +:10812000554E543A2020202020203078003A194320 +:10813000CD0701CD0C860A0D56414C2E4D454D5FA5 +:108140004641545F534543544F52533A2020202018 +:10815000307800DD211A43CD4D82CD0C86202020C1 +:108160002020207C202056414C2E4D454D5F46411D +:10817000545F434F554E54313A2020202020203068 +:1081800078003A1C43CD0701CD0C860A0D56414CB0 +:108190002E4D454D5F4641545F4F46305F43434C43 +:1081A0005553543A20307800DD213543CD4D82CDF2 +:1081B0000C862020202020207C20205054522E4D40 +:1081C000454D5F4641545F4F46305F4641545345ED +:1081D000433A2020307800DD213743CD3482CD0C66 +:1081E000860A0D56414C2E4D454D5F4641545F4F1A +:1081F00046305F4441545345433A20307800DD21F6 +:108200003B43CD3482CD0C8620207C20205054521C +:108210002E4D454D5F4641545F4F46305F444154BB +:1082200052454D3A2020307800DD213F43CD4D822C +:10823000CDF100C9DD7E03CD0701DD7E02CD070152 +:10824000DD7E01CD0701DD7E00CD0701C9DD7E01A8 +:10825000CD0701DD7E00CD0701C9327640F5CD970F +:1082600014DD7E00B7C28882CD0B832A3240ED5BDD +:108270002E40CD548521A482CDDF00F1C645CDD757 +:108280000021BB82CDDF00C921A482CDDF00F1C671 +:1082900045CDD70021AD82CDDF0011200001700057 +:1082A000CD170DC90A0D447269766520003A206E1B +:1082B0006F742072656164790A0D003A2073656CF1 +:1082C00065637465640A0D000A0D496E76616C6918 +:1082D00064206472697665206C65747465720A0D39 +:1082E000000000000000000000000000000000008E +:1082F000000000000000000000000000000000007E +:108300000000000000000000000000CD4585213283 +:10831000403E01CDBE143A1741FEEBC25D83DD2124 +:108320001741DD7E0E321743DD7E0F321843DD7EAE +:1083300010321943DD7E16321A43DD7E17321B439D +:108340003A1B43573A1A435FAF676F3A19434719CD +:1083500010FD16003A17435F19CD0085C9CD0C8674 +:108360000A0D43616E6E6F742066696E6420626FE1 +:108370006F7420736563746F722E0A0D00CD9714AD +:10838000DD360002C9ED5B1A43ED531C4321324038 +:108390000601CDBE14CD0C860A0D202046696C6501 +:1083A0006E616D652020202020436C7573746572AA +:1083B0002053697A650A0D002117410E107EE5DD14 +:1083C000E1E5FE41CA6384FEE5CA6384FE00CA9407 +:1083D00084DD7E0BFE10CA31843E20CDD7003E20C6 +:1083E000CDD7000608CD63173E2ECDD7000603CDAE +:1083F0006317CD0C8620307800DD7E1BCD0701DDB4 +:108400007E1ACD0701CD0C862020307800DD7E1F3E +:10841000CD0701DD7E1ECD0701DD7E1DCD0701DD0F +:108420007E1CCD07013E0ACDD7003E0DCDD70018EA +:10843000323E44CDD7003E20CDD7000608CD63178D +:10844000CD0C862020202020307800DD7E1BCD073B +:1084500001DD7E1ACD07013E0ACDD7003E0DCDD7F6 +:108460000018000D2808E111200019C3BD83E12682 +:10847000002E01CD0085ED5B1C431BED531C437AA0 +:10848000B3CA95842132400601CDBE142117410E96 +:1084900010C3BD83E1C9D5212543CD73853E10327C +:1084A0001C432132400601CDBE142117410E10D1CC +:1084B000D5CD5D8538330D280711200019C3AF8451 +:1084C00026002E01CD00853A1C433D321C43CAE1F3 +:1084D000842132400601CDBE142117410E10C3AFD6 +:1084E00084D1219885CDDF00C9D10608CD63173E20 +:1084F0002ECDD7000603CD631721AA85CDDF00C995 +:10850000221D43AF321F43322043111D430132402D +:10851000CD1485C9E5C5D51A6F131A67130A5F0311 +:108520000A5719D1C17D02037C02031313C5D51A62 +:108530006F131A67130A5F030A57ED5AD1C17D0200 +:10854000037C02E1C9CD9714DD23DD23DDE5E111D4 +:1085500032401800C506000E04EDB0C1C9E5C506DD +:108560000B1A4F7EA920070520F7C1E137C9C1E1E9 +:10857000373FC9060BE5AF772310FCE1060D1AB7AC +:10858000C805C8FE2E200A1378FE0538F123051809 +:10859000F71A772313C37E8546696C65206E6F7466 +:1085A00020666F756E64210D0A002046696C652097 +:1085B0006C6F6361746564210D0A002A35437C6F1A +:1085C000AF67ED4B174309223743AF323943323A95 +:1085D00043CD9714DD23DD23DDE5D1013743CD14F1 +:1085E00085CD3A802137430601CDBE1421174106BF +:1085F00014CDC9163A3543176F3E0017671117415E +:1086000019113543EDA0EDA0CD3A80C9E3F5C57E43 +:0F861000FE002806CDD7002318F523C1F1E3C9DA :00000001FF diff --git a/OperatingSystem/software/zout/test.lst b/OperatingSystem/software/zout/test.lst index 37bb846..e334db4 100644 --- a/OperatingSystem/software/zout/test.lst +++ b/OperatingSystem/software/zout/test.lst @@ -3,892 +3,1312 @@ 1: ;This file is generated by the build script. 2: ;Do not make any changes here! 3: - 4: - 0091 AY0_WRITE_REG equ 0x91 - 5: - 0312 A_RTS_OFF equ 0x312 - 6: - 031B A_RTS_ON equ 0x31B - 7: - 0239 CMD_DASM equ 0x239 - 8: - 012F CMD_EXEC equ 0x12F - 9: - 021D CMD_IO_READ equ 0x21D - 10: - 01F4 CMD_IO_WRITE equ 0x1F4 - 11: - 01B8 CMD_SET equ 0x1B8 - 12: - 01EE CMD_SET_END equ 0x1EE - 13: - 01D3 CMD_SET_LOOP equ 0x1D3 - 14: - 0272 CMD_SYNTAX_ERROR equ 0x272 - 15: - 014E CMD_VIEW equ 0x14E - 16: - 01B2 CMD_VIEW_END equ 0x1B2 - 17: - 0187 CMD_VIEW_ROW equ 0x187 - 18: - 0199 CMD_VIEW_ROW_LOOP equ 0x199 - 19: - 027E CONSOLE_INIT equ 0x27E - 20: - 027E CONSOLE_INIT_CTC equ 0x27E - 21: - 0286 CONSOLE_INIT_SIO equ 0x286 - 22: - 0000 CS_BANK equ 0x00 - 23: - 0004 CS_CTC_0 equ 0x04 - 24: - 0005 CS_CTC_1 equ 0x05 - 25: - 0006 CS_CTC_2 equ 0x06 - 26: - 0007 CS_CTC_3 equ 0x07 - 27: - 0001 CS_DIP equ 0x01 - 28: - 0033 CS_PIA_CR equ 0x33 - 29: - 0030 CS_PIA_PA equ 0x30 - 30: - 0031 CS_PIA_PB equ 0x31 - 31: - 0032 CS_PIA_PC equ 0x32 - 32: - 00F6 CS_PIO_AC equ 0xF6 - 33: - 00F4 CS_PIO_AD equ 0xF4 - 34: - 00F7 CS_PIO_BC equ 0xF7 - 35: - 00F5 CS_PIO_BD equ 0xF5 - 36: - 0009 CS_SIO_A_C equ 0x09 - 37: - 0008 CS_SIO_A_D equ 0x08 - 38: - 000B CS_SIO_B_C equ 0x0B - 39: - 000A CS_SIO_B_D equ 0x0A - 40: - 0324 DHEX_TO_BYTE equ 0x324 - 41: - 0340 DHEX_TO_BYTE_FAILED equ 0x340 - 42: - 0EC4 EXEC_RST_08 equ 0xEC4 - 43: - 0EC8 EXEC_RST_10 equ 0xEC8 - 44: - 0ED4 EXEC_RST_18 equ 0xED4 - 45: - 0344 HEX_TO_BIN equ 0x344 - 46: - 0352 HEX_TO_BIN_2 equ 0x352 - 47: - 0359 HEX_TO_INVALID_2 equ 0x359 - 48: - 00EC IDE_CMD_IDENT equ 0xEC - 49: - 0020 IDE_CMD_READSEC equ 0x20 - 50: - 0040 IDE_RD equ 0x40 - 51: - 0016 IDE_REG_ALTSTS equ 0x16 - 52: - 000F IDE_REG_CMDSTS equ 0x0F - 53: - 0008 IDE_REG_DATA equ 0x08 - 54: - 0017 IDE_REG_DRVADDR equ 0x17 - 55: - 0009 IDE_REG_ERROR equ 0x09 - 56: - 000D IDE_REG_HCYL equ 0x0D - 57: - 000E IDE_REG_HEAD equ 0x0E - 58: - 000C IDE_REG_LCYL equ 0x0C - 59: - 000A IDE_REG_SECTOR equ 0x0A - 60: - 000B IDE_REG_SSECTOR equ 0x0B - 61: - 0080 IDE_RST equ 0x80 - 62: - 0020 IDE_WR equ 0x20 - 63: - 001B INT_VEC equ 0x1B - 64: - 0040 IO_AY0_ADDR equ 0x40 - 65: - 0041 IO_AY0_DATA equ 0x41 - 66: - 0042 IO_AY1_ADDR equ 0x42 - 67: - 0043 IO_AY1_DATA equ 0x43 - 68: - 0020 IO_REG0 equ 0x20 - 69: - 0025 IO_RTC_AMPM equ 0x25 - 70: - 002D IO_RTC_CTR_D equ 0x2D - 71: - 002E IO_RTC_CTR_E equ 0x2E - 72: - 002F IO_RTC_CTR_F equ 0x2F - 73: - 0026 IO_RTC_DAY0 equ 0x26 - 74: - 0027 IO_RTC_DAY1 equ 0x27 - 75: - 0024 IO_RTC_HOUR equ 0x24 - 76: - 0022 IO_RTC_MIN0 equ 0x22 - 77: - 0023 IO_RTC_MIN1 equ 0x23 - 78: - 0028 IO_RTC_MON0 equ 0x28 - 79: - 0029 IO_RTC_MON1 equ 0x29 - 80: - 0020 IO_RTC_SEC0 equ 0x20 - 81: - 0021 IO_RTC_SEC1 equ 0x21 - 82: - 002C IO_RTC_WEEK equ 0x2C - 83: - 002B IO_RTC_YEAR1 equ 0x2B - 84: - 002A IO_RTC_YERR0 equ 0x2A - 85: - 027E Includes equ 0x27E - 86: - 5000 MEM_IDE_BASE equ 0x5000 - 87: - 5041 MEM_IDE_BUFFER equ 0x5041 - 88: - 5000 MEM_IDE_DEVICE equ 0x5000 - 89: - 5002 MEM_IDE_PARTITION equ 0x5002 - 90: - 5006 MEM_IDE_POINTER equ 0x5006 - 91: - 5001 MEM_IDE_STATUS equ 0x5001 - 92: - 40FE MEM_INT_VEC_T equ 0x40FE - 93: - 4400 MEM_LOC_LOAD equ 0x4400 - 94: - 40FB MEM_VAR_BLOCK equ 0x40FB - 95: - 40FC MEM_VAR_TIMEA equ 0x40FC - 96: - 40FE MEM_VAR_TIMER equ 0x40FE - 97: - 030A MSG_CLEAR equ 0x30A - 98: - 1048 MSG_ERROR equ 0x1048 - 99: - 1061 MSG_START equ 0x1061 - 100: - 4110 PRG_RAM_START equ 0x4110 - 101: - FF00 PRG_RAM_TOP equ 0xFF00 - 102: - 4000 PROG_MEM_START equ 0x4000 - 103: - 0100 PROG_ROM_START equ 0x100 - 104: - 0099 PROMPT_BEGIN equ 0x99 - 105: - 00D6 PROMPT_BEGIN_READ_BACKSPACE equ 0xD6 - 106: - 00A5 PROMPT_BEGIN_READ_LOOP equ 0xA5 - 107: - 00FC PROMPT_BEGIN_READ_PROCESS equ 0xFC - 108: - 0000 RST_00 equ 0x00 - 109: - 0008 RST_08 equ 0x08 - 110: - 0010 RST_10 equ 0x10 - 111: - 0018 RST_18 equ 0x18 - 112: - FFFF STACK_RAM_TOP equ 0xFFFF - 113: - 0000 START_ROM equ 0x00 - 114: - 035B STRCONV_BYTES_TO_HEX equ 0x35B - 115: - 036A STRCONV_BYTES_TO_HEX_1 equ 0x36A - 116: - 0374 STRCONV_BYTES_TO_HEX_2 equ 0x374 - 117: - 1360 STR_Banner_Start equ 0x1360 - 118: - 1390 STR_HEXDUMP_HEADER equ 0x1390 - 119: - 1319 STR_PD_HEADER equ 0x1319 - 120: - 1386 STR_SyntaxError equ 0x1386 - 121: - 138B STR_Unknown equ 0x138B - 122: - 0006 SYM_ACK equ 0x06 - 123: - 0043 SYM_C equ 0x43 - 124: - 0018 SYM_CAN equ 0x18 - 125: - 0004 SYM_EOT equ 0x04 - 126: - 0017 SYM_ETB equ 0x17 - 127: - 0015 SYM_NAK equ 0x15 - 128: - 0001 SYM_SOH equ 0x01 - 129: - 4010 SYS_BUF_START equ 0x4010 - 130: - 4000 SYS_RAM_START equ 0x4000 - 131: - 0018 VAR_CONSOLE_BAUD equ 0x18 - 132: - 000F VAR_CONSOLE_CONF equ 0x0F - 133: - 0080 VDP_MEM equ 0x80 - 134: - 0081 VDP_REG equ 0x81 - 135: - 0ED7 beep equ 0xED7 - 136: - 0EDA beep_loop equ 0xEDA - 137: - 0EF7 beep_pause equ 0xEF7 - 138: - 0ADC dasm_00 equ 0xADC - 139: - 0DC8 dasm_01 equ 0xDC8 - 140: - 0B62 dasm_02 equ 0xB62 - 141: - 0D9A dasm_03 equ 0xD9A - 142: - 0BDF dasm_08 equ 0xBDF - 143: - 0D6D dasm_09 equ 0xD6D - 144: - 0B44 dasm_0A equ 0xB44 - 145: - 0DB1 dasm_0B equ 0xDB1 - 146: - 0B24 dasm_10 equ 0xB24 - 147: - 0B6D dasm_12 equ 0xB6D - 148: - 0AE7 dasm_18 equ 0xAE7 - 149: - 0B4E dasm_1A equ 0xB4E - 150: - 0B01 dasm_20 equ 0xB01 - 151: - 0E0E dasm_22 equ 0xE0E - 152: - 0BA7 dasm_27 equ 0xBA7 - 153: - 0AFA dasm_28 equ 0xAFA - 154: - 0DDF dasm_2A equ 0xDDF - 155: - 0BAB dasm_2F equ 0xBAB - 156: - 0AF2 dasm_30 equ 0xAF2 - 157: - 0B78 dasm_32 equ 0xB78 - 158: - 0BB7 dasm_37 equ 0xBB7 - 159: - 0AEB dasm_38 equ 0xAEB - 160: - 0B58 dasm_3A equ 0xB58 - 161: - 0BB3 dasm_3F equ 0xBB3 - 162: - 0BBB dasm_76 equ 0xBBB - 163: - 0C38 dasm_80C6 equ 0xC38 - 164: - 0BD5 dasm_BE equ 0xBD5 - 165: - 0AE0 dasm_C3 equ 0xAE0 - 166: - 0C5E dasm_C88E equ 0xC5E - 167: - 0B30 dasm_C9 equ 0xB30 - 168: - 0B2A dasm_CD equ 0xB2A - 169: - 0BEC dasm_D9 equ 0xBEC - 170: - 0B12 dasm_DD equ 0xB12 - 171: - 0DCF dasm_DD_01 equ 0xDCF - 172: - 0D88 dasm_DD_09 equ 0xD88 - 173: - 0E24 dasm_DD_22 equ 0xE24 - 174: - 0D9F dasm_DD_23 equ 0xD9F - 175: - 0DF6 dasm_DD_2A equ 0xDF6 - 176: - 0DB6 dasm_DD_2B equ 0xDB6 - 177: - 0D38 dasm_DD_34 equ 0xD38 - 178: - 0D55 dasm_DD_35 equ 0xD55 - 179: - 0C40 dasm_DD_86 equ 0xC40 - 180: - 0C66 dasm_DD_8E equ 0xC66 - 181: - 0C89 dasm_DD_96 equ 0xC89 - 182: - 0CA9 dasm_DD_9E equ 0xCA9 - 183: - 0CCA dasm_DD_A6 equ 0xCCA - 184: - 0D01 dasm_DD_AE equ 0xD01 - 185: - 0CE6 dasm_DD_B6 equ 0xCE6 - 186: - 0D1D dasm_DD_BE equ 0xD1D - 187: - 0E76 dasm_DD_E1 equ 0xE76 - 188: - 0BFC dasm_DD_E3 equ 0xBFC - 189: - 0E60 dasm_DD_E5 equ 0xE60 - 190: - 0E46 dasm_DD_F9 equ 0xE46 - 191: - 0E70 dasm_E1 equ 0xE70 - 192: - 0BF0 dasm_E3 equ 0xBF0 - 193: - 0E5A dasm_E5 equ 0xE5A - 194: - 0B09 dasm_E9 equ 0xB09 - 195: - 0D7F dasm_ED_42 equ 0xD7F - 196: - 0E1A dasm_ED_43 equ 0xE1A - 197: - 0BAF dasm_ED_44 equ 0xBAF - 198: - 0B3A dasm_ED_45 equ 0xB3A - 199: - 0BC6 dasm_ED_46 equ 0xBC6 - 200: - 0D76 dasm_ED_4A equ 0xD76 - 201: - 0DEB dasm_ED_4B equ 0xDEB - 202: - 0B35 dasm_ED_4D equ 0xB35 - 203: - 0BCB dasm_ED_56 equ 0xBCB - 204: - 0BD0 dasm_ED_5E equ 0xBD0 - 205: - 0C14 dasm_ED_A0 equ 0xC14 - 206: - 0C26 dasm_ED_A1 equ 0xC26 - 207: - 0C1D dasm_ED_A8 equ 0xC1D - 208: - 0C2F dasm_ED_A9 equ 0xC2F - 209: - 0C18 dasm_ED_B0 equ 0xC18 - 210: - 0C2A dasm_ED_B1 equ 0xC2A - 211: - 0C21 dasm_ED_B8 equ 0xC21 - 212: - 0C33 dasm_ED_B9 equ 0xC33 - 213: - 0BC0 dasm_F3 equ 0xBC0 - 214: - 0E3C dasm_F9 equ 0xE3C - 215: - 0BC3 dasm_FB equ 0xBC3 - 216: - 0B1B dasm_FD equ 0xB1B - 217: - 0DD7 dasm_FD_01 equ 0xDD7 - 218: - 0D91 dasm_FD_09 equ 0xD91 - 219: - 0E30 dasm_FD_22 equ 0xE30 - 220: - 0DA8 dasm_FD_23 equ 0xDA8 - 221: - 0E02 dasm_FD_2A equ 0xE02 - 222: - 0DBF dasm_FD_2B equ 0xDBF - 223: - 0D44 dasm_FD_34 equ 0xD44 - 224: - 0D61 dasm_FD_35 equ 0xD61 - 225: - 0C4F dasm_FD_86 equ 0xC4F - 226: - 0C75 dasm_FD_8E equ 0xC75 - 227: - 0C95 dasm_FD_96 equ 0xC95 - 228: - 0CB7 dasm_FD_9E equ 0xCB7 - 229: - 0CD6 dasm_FD_A6 equ 0xCD6 - 230: - 0D0D dasm_FD_AE equ 0xD0D - 231: - 0CF1 dasm_FD_B6 equ 0xCF1 - 232: - 0D28 dasm_FD_BE equ 0xD28 - 233: - 0E7E dasm_FD_E1 equ 0xE7E - 234: - 0C08 dasm_FD_E3 equ 0xC08 - 235: - 0E68 dasm_FD_E5 equ 0xE68 - 236: - 0E50 dasm_FD_F9 equ 0xE50 - 237: - 0B3F dasm_FF equ 0xB3F - 238: - 0E86 dasm_UU equ 0xE86 - 239: - 0E8A dasm_UW equ 0xE8A - 240: - 0CC5 dasm__AND equ 0xCC5 - 241: - 0D19 dasm__CP equ 0xD19 - 242: - 0D50 dasm__DEC equ 0xD50 - 243: - 0B97 dasm__ED_47 equ 0xB97 - 244: - 0B9F dasm__ED_4F equ 0xB9F - 245: - 0B87 dasm__ED_57 equ 0xB87 - 246: - 0B8F dasm__ED_5F equ 0xB8F - 247: - 0D33 dasm__INC equ 0xD33 - 248: - 0B83 dasm__LD equ 0xB83 - 249: - 0CE2 dasm__OR equ 0xCE2 - 250: - 0CA1 dasm__SBC equ 0xCA1 - 251: - 0C84 dasm__SUB equ 0xC84 - 252: - 0CFC dasm__XOR equ 0xCFC - 253: - 0684 dasm_opcode_table equ 0x684 - 254: - 04B1 dasm_print16hex_addr equ 0x4B1 - 255: - 04C9 dasm_print8hex equ 0x4C9 - 256: - 0E8F dasm_printFlags_table equ 0xE8F - 257: - 0E9F dasm_printRegister8_table equ 0xE9F - 258: - 0EBF dasm_printRegister8_table_HL equ 0xEBF - 259: - 0EA7 dasm_printRegisterIX_table equ 0xEA7 - 260: - 0EAF dasm_printRegisterIY_table equ 0xEAF - 261: - 0EB7 dasm_printRegisterSP_table equ 0xEB7 - 262: - 0375 disassemble equ 0x375 - 263: - 045B disassemble_continue equ 0x45B - 264: - 044B disassemble_err equ 0x44B - 265: - 0379 disassemble_next equ 0x379 - 266: - 0448 disassemble_print_opcode_params_end equ 0x448 - 267: - 03F4 disassemble_print_opcode_params_loop equ 0x3F4 - 268: - 03B6 disassemble_print_opcode_raw equ 0x3B6 - 269: - 03CA disassemble_print_opcode_raw_fill equ 0x3CA - 270: - 048D disassemble_table_first_match equ 0x48D - 271: - 04A7 disassemble_table_found equ 0x4A7 - 272: - 04AB disassemble_table_notfound equ 0x4AB - 273: - 0469 disassemble_table_seek equ 0x469 - 274: - 046D disassemble_table_seek_loop equ 0x46D - 275: - 12BE dump_pretty equ 0x12BE - 276: - 12E8 dump_pretty_ascii equ 0x12E8 - 277: - 1306 dump_pretty_ascii_cont equ 0x1306 - 278: - 12F0 dump_pretty_ascii_loop equ 0x12F0 - 279: - 1301 dump_pretty_ascii_none equ 0x1301 - 280: - 12DB dump_pretty_col equ 0x12DB - 281: - 1318 dump_pretty_end equ 0x1318 - 282: - 130C dump_pretty_nextrow equ 0x130C - 283: - 12C6 dump_pretty_row equ 0x12C6 - 284: - 116E ide_printerror equ 0x116E - 285: - 10ED ide_readsector_256 equ 0x10ED - 286: - 111C ide_readsector_256_done equ 0x111C - 287: - 10EF ide_readsector_256_waitloop equ 0x10EF - 288: - 111D ide_readsector_512_inv equ 0x111D - 289: - 1122 ide_readsector_512_inv_waitloop equ 0x1122 - 290: - 1158 ide_readsector_timeout equ 0x1158 - 291: - 10CF ide_regread_8 equ 0x10CF - 292: - 10B3 ide_regwrite_8 equ 0x10B3 - 293: - 10A6 ide_reset equ 0x10A6 - 294: - 116D ide_writesector_256 equ 0x116D - 295: - 11F4 ideif_init_drive equ 0x11F4 - 296: - 1222 ideif_init_drive_detected equ 0x1222 - 297: - 1208 ideif_init_drive_loop1 equ 0x1208 - 298: - 121B ideif_init_drive_nodrv equ 0x121B - 299: - 007B mon_start_complete equ 0x7B - 300: - 0050 mon_start_init_ctc equ 0x50 - 301: - 0064 mon_start_init_serial equ 0x64 - 302: - 0050 mon_start_init_sound equ 0x50 - 303: - 0067 mon_start_ram equ 0x67 - 304: - 0070 mon_start_ram_loop equ 0x70 - 305: - 0044 mon_var_template equ 0x44 - 306: - 006E mon_var_template_end equ 0x6E - 307: - 04D7 param_01 equ 0x4D7 - 308: - 04FE param_02 equ 0x4FE - 309: - 051B param_03 equ 0x51B - 310: - 0553 param_03_done equ 0x553 - 311: - 053C param_03_neg equ 0x53C - 312: - 0557 param_04 equ 0x557 - 313: - 0567 param_04_i equ 0x567 - 314: - 056D param_05 equ 0x56D - 315: - 057A param_06 equ 0x57A - 316: - 0594 param_07 equ 0x594 - 317: - 05A1 param_08 equ 0x5A1 - 318: - 05B6 param_09 equ 0x5B6 - 319: - 05BC param_09_0A equ 0x5BC - 320: - 05AD param_0A equ 0x5AD - 321: - 05CB param_10 equ 0x5CB - 322: - 05DB param_11 equ 0x5DB - 323: - 05EA param_11_12 equ 0x5EA - 324: - 060A param_11_12_all equ 0x60A - 325: - 05FD param_11_12_def equ 0x5FD - 326: - 0602 param_11_12_ix equ 0x602 - 327: - 0607 param_11_12_iy equ 0x607 - 328: - 05E3 param_12 equ 0x5E3 - 329: - 061B param_13 equ 0x61B - 330: - 063A param_80 equ 0x63A - 331: - 0641 param_80_seek equ 0x641 - 332: - 0631 param_81 equ 0x631 - 333: - 0675 param_comma equ 0x675 - 334: - 0650 param_printRegister equ 0x650 - 335: - 066E param_printRegisterA equ 0x66E - 336: - 0666 param_printRegisterHL equ 0x666 - 337: - 02E7 print_a_hex equ 0x2E7 - 338: - 02B7 print_char equ 0x2B7 - 339: - 02CA print_clear equ 0x2CA - 340: - 02D1 print_newLine equ 0x2D1 - 341: - 02BF print_str equ 0x2BF - 342: - 02C9 print_str_end equ 0x2C9 - 343: - 1358 print_str_fixed equ 0x1358 - 344: - 02DC print_wait_out equ 0x2DC - 345: - 02F8 read_char equ 0x2F8 - 346: - 1256 read_lba_sector equ 0x1256 - 347: - 12B3 str_dev_notfound equ 0x12B3 - 348: - 129D str_dev_ready equ 0x129D - 349: - 12AA str_dev_ready2 equ 0x12AA - 350: - 1289 str_dev_waitready equ 0x1289 - 351: - 11A1 str_error_start equ 0x11A1 - 352: - 11BE str_error_start1 equ 0x11BE - 353: - 11C7 str_error_start2 equ 0x11C7 - 354: - 11D0 str_error_time equ 0x11D0 - 355: - 4029 var_buffer equ 0x4029 - 356: - 4000 var_buffer_len equ 0x4000 - 357: - 411A var_bytes_count equ 0x411A - 358: - 4006 var_curserchar equ 0x4006 - 359: - 4007 var_curserlastaddr equ 0x4007 - 360: - 4005 var_curseron equ 0x4005 - 361: - 4004 var_curserstate equ 0x4004 - 362: - 4002 var_curserx equ 0x4002 - 363: - 4003 var_cursery equ 0x4003 - 364: - 4001 var_last_char equ 0x4001 - 365: - 4114 var_opcode equ 0x4114 - 366: - 4116 var_opcode_length equ 0x4116 - 367: - 4119 var_opcode_pcount equ 0x4119 - 368: - 4110 var_opcode_start equ 0x4110 - 369: - 4117 var_opcode_string equ 0x4117 - 370: - 4112 var_opcode_table equ 0x4112 - 371: - 4115 var_opcode_x equ 0x4115 - 372: - 4019 var_ps2mem equ 0x4019 - 373: - 4009 var_scratch equ 0x4009 - 374: - 107B xmodem_ack equ 0x107B - 375: - 0F34 xmodem_await_conn equ 0xF34 - 376: - 0FDF xmodem_end equ 0xFDF - 377: - 0FA5 xmodem_err equ 0xFA5 - 378: - 0F06 xmodem_init equ 0xF06 - 379: - 0FE6 xmodem_int equ 0xFE6 - 380: - 1005 xmodem_int_cont equ 0x1005 - 381: - 1089 xmodem_nak equ 0x1089 - 382: - 1037 xmodem_out equ 0x1037 - 383: - 0F3F xmodem_packet equ 0xF3F - 384: - 0F9D xmodem_packet_EOT equ 0xF9D - 385: - 0F51 xmodem_packet_get equ 0xF51 - 386: - 0F8A xmodem_packet_get_crc equ 0xF8A - 387: - 0F7B xmodem_packet_get_data equ 0xF7B - 388: - 0003 xmodem_read_timeount equ 0x03 - 389: - 100A xmodem_read_wait equ 0x100A - 390: - 1018 xmodem_read_wait_loop equ 0x1018 - 391: - 1035 xmodem_read_wait_timeout equ 0x1035 - 392: - 1097 xmodem_wait equ 0x1097 - 393: - 109D xmodem_wait_1 equ 0x109D - 394: - 103D xmodem_wait_out equ 0x103D + 4: - 00D0 ADDR_RTC equ 0xD0 + 5: - 0152 A_RTS_OFF equ 0x152 + 6: - 015B A_RTS_ON equ 0x15B + 7: - 0050 BOOT_PHASE0 equ 0x50 + 8: - 006E BOOT_PHASE1 equ 0x6E + 9: - 0077 BOOT_PHASE1_LOOP equ 0x77 + 10: - 0082 BOOT_PHASE2 equ 0x82 + 11: - 17EB COMMAND equ 0x17EB + 12: - 1826 COMMAND_BACKSPACE equ 0x1826 + 13: - 176B COMMAND_LUT equ 0x176B + 14: - 184C COMMAND_PROCESS equ 0x184C + 15: - 1887 COMMAND_PROCESS_FOUND equ 0x1887 + 16: - 184F COMMAND_PROCESS_LOOP equ 0x184F + 17: - 1858 COMMAND_PROCESS_LOOP_STR1 equ 0x1858 + 18: - 186E COMMAND_PROCESS_LOOP_STR2 equ 0x186E + 19: - 1873 COMMAND_PROCESS_NEXT_ENTRY equ 0x1873 + 20: - 1872 COMMAND_PROCESS_NEXT_ENTRYI equ 0x1872 + 21: - 187E COMMAND_PROCESS_NOT_FOUND equ 0x187E + 22: - 17F7 COMMAND_READ equ 0x17F7 + 23: - 009E CONSOLE_INIT equ 0x9E + 24: - 009E CONSOLE_INIT_CTC equ 0x9E + 25: - 00A6 CONSOLE_INIT_SIO equ 0xA6 + 26: - 00F9 CS_APU_CTRL equ 0xF9 + 27: - 00F8 CS_APU_DATA equ 0xF8 + 28: - 0000 CS_BANK equ 0x00 + 29: - 0004 CS_CTC_0 equ 0x04 + 30: - 0005 CS_CTC_1 equ 0x05 + 31: - 0006 CS_CTC_2 equ 0x06 + 32: - 0007 CS_CTC_3 equ 0x07 + 33: - 0001 CS_DIP equ 0x01 + 34: - 0033 CS_PIA_CR equ 0x33 + 35: - 0030 CS_PIA_PA equ 0x30 + 36: - 0031 CS_PIA_PB equ 0x31 + 37: - 0032 CS_PIA_PC equ 0x32 + 38: - 00F6 CS_PIO_AC equ 0xF6 + 39: - 00F4 CS_PIO_AD equ 0xF4 + 40: - 00F7 CS_PIO_BC equ 0xF7 + 41: - 00F5 CS_PIO_BD equ 0xF5 + 42: - 0009 CS_SIO_A_C equ 0x09 + 43: - 0008 CS_SIO_A_D equ 0x08 + 44: - 000B CS_SIO_B_C equ 0x0B + 45: - 000A CS_SIO_B_D equ 0x0A + 46: - 0164 DHEX_TO_BYTE equ 0x164 + 47: - 0180 DHEX_TO_BYTE_FAILED equ 0x180 + 48: - 189D ERR_SYNTAX equ 0x189D + 49: - 0D04 EXEC_RST_08 equ 0xD04 + 50: - 0D08 EXEC_RST_10 equ 0xD08 + 51: - 0D14 EXEC_RST_18 equ 0xD14 + 52: - 0184 HEX_TO_BIN equ 0x184 + 53: - 0192 HEX_TO_BIN_2 equ 0x192 + 54: - 0199 HEX_TO_INVALID_2 equ 0x199 + 55: - 00EC IDE_CMD_IDENT equ 0xEC + 56: - 0020 IDE_CMD_READSEC equ 0x20 + 57: - 1275 IDE_DEV_TABLE equ 0x1275 + 58: - 0040 IDE_RD equ 0x40 + 59: - 0016 IDE_REG_ALTSTS equ 0x16 + 60: - 000F IDE_REG_CMDSTS equ 0x0F + 61: - 0008 IDE_REG_DATA equ 0x08 + 62: - 0017 IDE_REG_DRVADDR equ 0x17 + 63: - 0009 IDE_REG_ERROR equ 0x09 + 64: - 000D IDE_REG_HCYL equ 0x0D + 65: - 000E IDE_REG_HEAD equ 0x0E + 66: - 000B IDE_REG_LBA0 equ 0x0B + 67: - 000C IDE_REG_LBA1 equ 0x0C + 68: - 000D IDE_REG_LBA2 equ 0x0D + 69: - 000E IDE_REG_LBA3 equ 0x0E + 70: - 000C IDE_REG_LCYL equ 0x0C + 71: - 000A IDE_REG_SECTOR equ 0x0A + 72: - 000B IDE_REG_SSECTOR equ 0x0B + 73: - 0080 IDE_RST equ 0x80 + 74: - 0020 IDE_WR equ 0x20 + 75: - 0001 IIC_CLK equ 0x01 + 76: - 0002 IIC_DATA equ 0x02 + 77: - 001B INT_VEC equ 0x1B + 78: - 402B IN_BUFFER equ 0x402B + 79: - 0040 IO_AY0_ADDR equ 0x40 + 80: - 0041 IO_AY0_DATA equ 0x41 + 81: - 0042 IO_AY1_ADDR equ 0x42 + 82: - 0043 IO_AY1_DATA equ 0x43 + 83: - 0020 IO_REG0 equ 0x20 + 84: - 0025 IO_RTC_AMPM equ 0x25 + 85: - 002D IO_RTC_CTR_D equ 0x2D + 86: - 002E IO_RTC_CTR_E equ 0x2E + 87: - 002F IO_RTC_CTR_F equ 0x2F + 88: - 0026 IO_RTC_DAY0 equ 0x26 + 89: - 0027 IO_RTC_DAY1 equ 0x27 + 90: - 0024 IO_RTC_HOUR equ 0x24 + 91: - 0022 IO_RTC_MIN0 equ 0x22 + 92: - 0023 IO_RTC_MIN1 equ 0x23 + 93: - 0028 IO_RTC_MON0 equ 0x28 + 94: - 0029 IO_RTC_MON1 equ 0x29 + 95: - 0020 IO_RTC_SEC0 equ 0x20 + 96: - 0021 IO_RTC_SEC1 equ 0x21 + 97: - 002C IO_RTC_WEEK equ 0x2C + 98: - 002B IO_RTC_YEAR1 equ 0x2B + 99: - 002A IO_RTC_YERR0 equ 0x2A + 100: - 4117 MEM_IDE_BUFFER equ 0x4117 + 101: - 402C MEM_IDE_DEVICE equ 0x402C + 102: - 4036 MEM_IDE_DEV_TABLE equ 0x4036 + 103: - 4317 MEM_IDE_FSBUFFER equ 0x4317 + 104: - 402E MEM_IDE_PARTITION equ 0x402E + 105: - 4032 MEM_IDE_POINTER equ 0x4032 + 106: - 4076 MEM_IDE_SELECTED equ 0x4076 + 107: - 402D MEM_IDE_STATUS equ 0x402D + 108: - 4077 MEM_IDE_STRING_0 equ 0x4077 + 109: - 409F MEM_IDE_STRING_1 equ 0x409F + 110: - 40C7 MEM_IDE_STRING_2 equ 0x40C7 + 111: - 40EF MEM_IDE_STRING_3 equ 0x40EF + 112: - 014A MSG_CLEAR equ 0x14A + 113: - 1896 NOT_IMPLEMENTED equ 0x1896 + 114: - 18F8 OP_CALL equ 0x18F8 + 115: - 1A8C OP_CLR equ 0x1A8C + 116: - 1979 OP_DASM equ 0x1979 + 117: - 1918 OP_DUMP equ 0x1918 + 118: - 18DF OP_EXEC equ 0x18DF + 119: - 1A40 OP_IIC_IN equ 0x1A40 + 120: - 19E0 OP_IIC_OUT equ 0x19E0 + 121: - 19A9 OP_IO_IN equ 0x19A9 + 122: - 19BF OP_IO_OUT equ 0x19BF + 123: - 1CA1 OP_LSDSK equ 0x1CA1 + 124: - 1A90 OP_RTIME equ 0x1A90 + 125: - 1CA5 OP_SELDSK equ 0x1CA5 + 126: - 1948 OP_SET equ 0x1948 + 127: - 1C28 OP_STIME equ 0x1C28 + 128: - 1D12 POST_CHECK_APU equ 0x1D12 + 129: - 1D3D POST_CHECK_IDE_30 equ 0x1D3D + 130: - 1D50 POST_CHECK_IDE_40 equ 0x1D50 + 131: - 1CED POST_CHECK_PIO equ 0x1CED + 132: - 1CDD POST_START equ 0x1CDD + 133: - 1D6A POST_TEST_RTC equ 0x1D6A + 134: - 4110 PRG_RAM_START equ 0x4110 + 135: - FF00 PRG_RAM_TOP equ 0xFF00 + 136: - 4000 PROG_MEM_START equ 0x4000 + 137: - 0100 PROG_ROM_START equ 0x100 + 138: - 0000 RST_00 equ 0x00 + 139: - 0008 RST_08 equ 0x08 + 140: - 0010 RST_10 equ 0x10 + 141: - 0018 RST_18 equ 0x18 + 142: - FFFF STACK_RAM_TOP equ 0xFFFF + 143: - 0000 START_ROM equ 0x00 + 144: - 019B STRCONV_BYTES_TO_HEX equ 0x19B + 145: - 01AA STRCONV_BYTES_TO_HEX_1 equ 0x1AA + 146: - 01B4 STRCONV_BYTES_TO_HEX_2 equ 0x1B4 + 147: - 1E6F STR_Banner_Start equ 0x1E6F + 148: - 1724 STR_PD_HEADER equ 0x1724 + 149: - 4010 SYS_BUF_START equ 0x4010 + 150: - 4000 SYS_RAM_START equ 0x4000 + 151: - 0018 VAR_CONSOLE_BAUD equ 0x18 + 152: - 000F VAR_CONSOLE_CONF equ 0x0F + 153: - 0080 VDP_MEM equ 0x80 + 154: - 0081 VDP_REG equ 0x81 + 155: - 1895 _COMMAND_PROCESS_FOUND equ 0x1895 + 156: - 1917 _OP_CALL equ 0x1917 + 157: - 1A25 _OP_IIC_ACK_ERR equ 0x1A25 + 158: - 1A2C _OP_IIC_ACK_ERR_str equ 0x1A2C + 159: - 1A72 _OP_IIC_IN_LOOP equ 0x1A72 + 160: - 1A7F _OP_IIC_IN_LOOP_TEXT equ 0x1A7F + 161: - 19F6 _OP_IIC_OUT_LOOP equ 0x19F6 + 162: - 1A12 _OP_IIC_OUT_SEND equ 0x1A12 + 163: - 1A93 _OP_RTIME_NN equ 0x1A93 + 164: - 1B4B _OP_RTIME_RD_CMD equ 0x1B4B + 165: - 1CB4 _OP_SELDSK_INVALID equ 0x1CB4 + 166: - 1CC4 _OP_SELDSK_INVALID_STR equ 0x1CC4 + 167: - 1960 _OP_SET_LOOP equ 0x1960 + 168: - 1BEE _OP_STIME_INVALID equ 0x1BEE + 169: - 1C05 _OP_STIME_PROMPT equ 0x1C05 + 170: - 1C1D _OP_STIME_PROMPT_ERR equ 0x1C1D + 171: - 1B4C _OP_STIME_STR_DAY equ 0x1B4C + 172: - 1B9D _OP_STIME_STR_HOUR equ 0x1B9D + 173: - 1BB8 _OP_STIME_STR_MIN equ 0x1BB8 + 174: - 1B67 _OP_STIME_STR_MON equ 0x1B67 + 175: - 1BD3 _OP_STIME_STR_SEC equ 0x1BD3 + 176: - 1B82 _OP_STIME_STR_YEAR equ 0x1B82 + 177: - 1D31 _POST_CHECK_APU_FAILED equ 0x1D31 + 178: - 1D63 _POST_CHECK_IDE_FAILED equ 0x1D63 + 179: - 1D06 _POST_CHECK_PIO_FAILED equ 0x1D06 + 180: - 1DA4 _POST_TEST_RTC_INVALID equ 0x1DA4 + 181: - 1D9D _POST_TEST_RTC_NOTFOUND equ 0x1D9D + 182: - 18B8 _STR_NOT_FOUND equ 0x18B8 + 183: - 18A4 _STR_NOT_IMPLEMENTED equ 0x18A4 + 184: - 18CC _STR_SYNTAX equ 0x18CC + 185: - 0D30 _beep_pause_l1 equ 0xD30 + 186: - 13E9 _ideif_init_drive_found equ 0x13E9 + 187: - 13D1 _ideif_init_drive_loop equ 0x13D1 + 188: - 13E4 _ideif_init_drive_nodrv equ 0x13E4 + 189: - 1454 _ideif_init_drive_prt_fnd equ 0x1454 + 190: - 1442 _ideif_init_drive_prt_l1 equ 0x1442 + 191: - 144C _ideif_init_drive_prt_ln equ 0x144C + 192: - 1510 _ideif_prnt_devtable_hdr equ 0x1510 + 193: - 12E1 _ideif_prnt_devtable_l1 equ 0x12E1 + 194: - 13A7 _ideif_prnt_devtable_l1_e2 equ 0x13A7 + 195: - 1326 _ideif_prnt_devtable_l1_es equ 0x1326 + 196: - 13A4 _ideif_prnt_devtable_l1_ms equ 0x13A4 + 197: - 12EE _ideif_prnt_devtable_l1_nxt equ 0x12EE + 198: - 1314 _ideif_prnt_devtable_l1_s00 equ 0x1314 + 199: - 1319 _ideif_prnt_devtable_l1_s01 equ 0x1319 + 200: - 131E _ideif_prnt_devtable_l1_s02 equ 0x131E + 201: - 1323 _ideif_prnt_devtable_l1_sFF equ 0x1323 + 202: - 12EC _ideif_prnt_devtable_l1_sel equ 0x12EC + 203: - 1574 _ideif_prnt_devtable_master equ 0x1574 + 204: - 1548 _ideif_prnt_devtable_s00 equ 0x1548 + 205: - 1553 _ideif_prnt_devtable_s01 equ 0x1553 + 206: - 155E _ideif_prnt_devtable_s02 equ 0x155E + 207: - 1569 _ideif_prnt_devtable_sFF equ 0x1569 + 208: - 157C _ideif_prnt_devtable_slave equ 0x157C + 209: - 0147 _read_bcd_invalid equ 0x147 + 210: - 1C9C _shift4 equ 0x1C9C + 211: - 0D17 beep equ 0xD17 + 212: - 0D19 beep_loop equ 0xD19 + 213: - 0D2F beep_pause equ 0xD2F + 214: - 091C dasm_00 equ 0x91C + 215: - 0C08 dasm_01 equ 0xC08 + 216: - 09A2 dasm_02 equ 0x9A2 + 217: - 0BDA dasm_03 equ 0xBDA + 218: - 0A1F dasm_08 equ 0xA1F + 219: - 0BAD dasm_09 equ 0xBAD + 220: - 0984 dasm_0A equ 0x984 + 221: - 0BF1 dasm_0B equ 0xBF1 + 222: - 0964 dasm_10 equ 0x964 + 223: - 09AD dasm_12 equ 0x9AD + 224: - 0927 dasm_18 equ 0x927 + 225: - 098E dasm_1A equ 0x98E + 226: - 0941 dasm_20 equ 0x941 + 227: - 0C4E dasm_22 equ 0xC4E + 228: - 09E7 dasm_27 equ 0x9E7 + 229: - 093A dasm_28 equ 0x93A + 230: - 0C1F dasm_2A equ 0xC1F + 231: - 09EB dasm_2F equ 0x9EB + 232: - 0932 dasm_30 equ 0x932 + 233: - 09B8 dasm_32 equ 0x9B8 + 234: - 09F7 dasm_37 equ 0x9F7 + 235: - 092B dasm_38 equ 0x92B + 236: - 0998 dasm_3A equ 0x998 + 237: - 09F3 dasm_3F equ 0x9F3 + 238: - 09FB dasm_76 equ 0x9FB + 239: - 0A78 dasm_80C6 equ 0xA78 + 240: - 0A15 dasm_BE equ 0xA15 + 241: - 0920 dasm_C3 equ 0x920 + 242: - 0A9E dasm_C88E equ 0xA9E + 243: - 0970 dasm_C9 equ 0x970 + 244: - 096A dasm_CD equ 0x96A + 245: - 0A2C dasm_D9 equ 0xA2C + 246: - 0952 dasm_DD equ 0x952 + 247: - 0C0F dasm_DD_01 equ 0xC0F + 248: - 0BC8 dasm_DD_09 equ 0xBC8 + 249: - 0C64 dasm_DD_22 equ 0xC64 + 250: - 0BDF dasm_DD_23 equ 0xBDF + 251: - 0C36 dasm_DD_2A equ 0xC36 + 252: - 0BF6 dasm_DD_2B equ 0xBF6 + 253: - 0B78 dasm_DD_34 equ 0xB78 + 254: - 0B95 dasm_DD_35 equ 0xB95 + 255: - 0A80 dasm_DD_86 equ 0xA80 + 256: - 0AA6 dasm_DD_8E equ 0xAA6 + 257: - 0AC9 dasm_DD_96 equ 0xAC9 + 258: - 0AE9 dasm_DD_9E equ 0xAE9 + 259: - 0B0A dasm_DD_A6 equ 0xB0A + 260: - 0B41 dasm_DD_AE equ 0xB41 + 261: - 0B26 dasm_DD_B6 equ 0xB26 + 262: - 0B5D dasm_DD_BE equ 0xB5D + 263: - 0CB6 dasm_DD_E1 equ 0xCB6 + 264: - 0A3C dasm_DD_E3 equ 0xA3C + 265: - 0CA0 dasm_DD_E5 equ 0xCA0 + 266: - 0C86 dasm_DD_F9 equ 0xC86 + 267: - 0CB0 dasm_E1 equ 0xCB0 + 268: - 0A30 dasm_E3 equ 0xA30 + 269: - 0C9A dasm_E5 equ 0xC9A + 270: - 0949 dasm_E9 equ 0x949 + 271: - 0BBF dasm_ED_42 equ 0xBBF + 272: - 0C5A dasm_ED_43 equ 0xC5A + 273: - 09EF dasm_ED_44 equ 0x9EF + 274: - 097A dasm_ED_45 equ 0x97A + 275: - 0A06 dasm_ED_46 equ 0xA06 + 276: - 0BB6 dasm_ED_4A equ 0xBB6 + 277: - 0C2B dasm_ED_4B equ 0xC2B + 278: - 0975 dasm_ED_4D equ 0x975 + 279: - 0A0B dasm_ED_56 equ 0xA0B + 280: - 0A10 dasm_ED_5E equ 0xA10 + 281: - 0A54 dasm_ED_A0 equ 0xA54 + 282: - 0A66 dasm_ED_A1 equ 0xA66 + 283: - 0A5D dasm_ED_A8 equ 0xA5D + 284: - 0A6F dasm_ED_A9 equ 0xA6F + 285: - 0A58 dasm_ED_B0 equ 0xA58 + 286: - 0A6A dasm_ED_B1 equ 0xA6A + 287: - 0A61 dasm_ED_B8 equ 0xA61 + 288: - 0A73 dasm_ED_B9 equ 0xA73 + 289: - 0A00 dasm_F3 equ 0xA00 + 290: - 0C7C dasm_F9 equ 0xC7C + 291: - 0A03 dasm_FB equ 0xA03 + 292: - 095B dasm_FD equ 0x95B + 293: - 0C17 dasm_FD_01 equ 0xC17 + 294: - 0BD1 dasm_FD_09 equ 0xBD1 + 295: - 0C70 dasm_FD_22 equ 0xC70 + 296: - 0BE8 dasm_FD_23 equ 0xBE8 + 297: - 0C42 dasm_FD_2A equ 0xC42 + 298: - 0BFF dasm_FD_2B equ 0xBFF + 299: - 0B84 dasm_FD_34 equ 0xB84 + 300: - 0BA1 dasm_FD_35 equ 0xBA1 + 301: - 0A8F dasm_FD_86 equ 0xA8F + 302: - 0AB5 dasm_FD_8E equ 0xAB5 + 303: - 0AD5 dasm_FD_96 equ 0xAD5 + 304: - 0AF7 dasm_FD_9E equ 0xAF7 + 305: - 0B16 dasm_FD_A6 equ 0xB16 + 306: - 0B4D dasm_FD_AE equ 0xB4D + 307: - 0B31 dasm_FD_B6 equ 0xB31 + 308: - 0B68 dasm_FD_BE equ 0xB68 + 309: - 0CBE dasm_FD_E1 equ 0xCBE + 310: - 0A48 dasm_FD_E3 equ 0xA48 + 311: - 0CA8 dasm_FD_E5 equ 0xCA8 + 312: - 0C90 dasm_FD_F9 equ 0xC90 + 313: - 097F dasm_FF equ 0x97F + 314: - 0CC6 dasm_UU equ 0xCC6 + 315: - 0CCA dasm_UW equ 0xCCA + 316: - 0B05 dasm__AND equ 0xB05 + 317: - 0B59 dasm__CP equ 0xB59 + 318: - 0B90 dasm__DEC equ 0xB90 + 319: - 09D7 dasm__ED_47 equ 0x9D7 + 320: - 09DF dasm__ED_4F equ 0x9DF + 321: - 09C7 dasm__ED_57 equ 0x9C7 + 322: - 09CF dasm__ED_5F equ 0x9CF + 323: - 0B73 dasm__INC equ 0xB73 + 324: - 09C3 dasm__LD equ 0x9C3 + 325: - 0B22 dasm__OR equ 0xB22 + 326: - 0AE1 dasm__SBC equ 0xAE1 + 327: - 0AC4 dasm__SUB equ 0xAC4 + 328: - 0B3C dasm__XOR equ 0xB3C + 329: - 04C4 dasm_opcode_table equ 0x4C4 + 330: - 02F1 dasm_print16hex_addr equ 0x2F1 + 331: - 0309 dasm_print8hex equ 0x309 + 332: - 0CCF dasm_printFlags_table equ 0xCCF + 333: - 0CDF dasm_printRegister8_table equ 0xCDF + 334: - 0CFF dasm_printRegister8_table_HL equ 0xCFF + 335: - 0CE7 dasm_printRegisterIX_table equ 0xCE7 + 336: - 0CEF dasm_printRegisterIY_table equ 0xCEF + 337: - 0CF7 dasm_printRegisterSP_table equ 0xCF7 + 338: - 01B5 disassemble equ 0x1B5 + 339: - 029B disassemble_continue equ 0x29B + 340: - 028B disassemble_err equ 0x28B + 341: - 01B9 disassemble_next equ 0x1B9 + 342: - 0288 disassemble_print_opcode_params_end equ 0x288 + 343: - 0234 disassemble_print_opcode_params_loop equ 0x234 + 344: - 01F6 disassemble_print_opcode_raw equ 0x1F6 + 345: - 020A disassemble_print_opcode_raw_fill equ 0x20A + 346: - 02CD disassemble_table_first_match equ 0x2CD + 347: - 02E7 disassemble_table_found equ 0x2E7 + 348: - 02EB disassemble_table_notfound equ 0x2EB + 349: - 02A9 disassemble_table_seek equ 0x2A9 + 350: - 02AD disassemble_table_seek_loop equ 0x2AD + 351: - 16C9 dump_pretty equ 0x16C9 + 352: - 16F3 dump_pretty_ascii equ 0x16F3 + 353: - 1711 dump_pretty_ascii_cont equ 0x1711 + 354: - 16FB dump_pretty_ascii_loop equ 0x16FB + 355: - 170C dump_pretty_ascii_none equ 0x170C + 356: - 16E6 dump_pretty_col equ 0x16E6 + 357: - 1723 dump_pretty_end equ 0x1723 + 358: - 1717 dump_pretty_nextrow equ 0x1717 + 359: - 16D1 dump_pretty_row equ 0x16D1 + 360: - 0E04 ide_printerror equ 0xE04 + 361: - 0D83 ide_readsector_256 equ 0xD83 + 362: - 0DB2 ide_readsector_256_done equ 0xDB2 + 363: - 0D85 ide_readsector_256_waitloop equ 0xD85 + 364: - 0DB3 ide_readsector_512_inv equ 0xDB3 + 365: - 0DB8 ide_readsector_512_inv_waitloop equ 0xDB8 + 366: - 0DEE ide_readsector_timeout equ 0xDEE + 367: - 0D65 ide_regread_8 equ 0xD65 + 368: - 0D49 ide_regwrite_8 equ 0xD49 + 369: - 0D3C ide_reset equ 0xD3C + 370: - 0E03 ide_writesector_256 equ 0xE03 + 371: - 1497 ideif_get_drv_pointer equ 0x1497 + 372: - 14AB ideif_init_all equ 0x14AB + 373: - 12B5 ideif_init_devtable equ 0x12B5 + 374: - 13C8 ideif_init_drive equ 0x13C8 + 375: - 12D3 ideif_prnt_devtable equ 0x12D3 + 376: - 15DD iic_init equ 0x15DD + 377: - 161C iic_read_ack equ 0x161C + 378: - 15AE iic_receive_buffer equ 0x15AE + 379: - 15D1 iic_receive_buffer_done equ 0x15D1 + 380: - 15D7 iic_receive_buffer_err equ 0x15D7 + 381: - 15BF iic_receive_buffer_loop equ 0x15BF + 382: - 16A2 iic_receive_byte equ 0x16A2 + 383: - 16AF iic_receive_byte_loop equ 0x16AF + 384: - 1642 iic_send_ack equ 0x1642 + 385: - 1584 iic_send_buffer equ 0x1584 + 386: - 15A2 iic_send_buffer_done equ 0x15A2 + 387: - 15A8 iic_send_buffer_err equ 0x15A8 + 388: - 1594 iic_send_buffer_loop equ 0x1594 + 389: - 167C iic_send_byte equ 0x167C + 390: - 1688 iic_send_byte_loop equ 0x1688 + 391: - 15FB iic_send_ebit equ 0x15FB + 392: - 165F iic_send_nack equ 0x165F + 393: - 15E6 iic_send_sbit equ 0x15E6 + 394: - 0044 mon_var_template equ 0x44 + 395: - 0370 mon_var_template_end equ 0x370 + 396: - 0317 param_01 equ 0x317 + 397: - 033E param_02 equ 0x33E + 398: - 035B param_03 equ 0x35B + 399: - 0393 param_03_done equ 0x393 + 400: - 037C param_03_neg equ 0x37C + 401: - 0397 param_04 equ 0x397 + 402: - 03A7 param_04_i equ 0x3A7 + 403: - 03AD param_05 equ 0x3AD + 404: - 03BA param_06 equ 0x3BA + 405: - 03D4 param_07 equ 0x3D4 + 406: - 03E1 param_08 equ 0x3E1 + 407: - 03F6 param_09 equ 0x3F6 + 408: - 03FC param_09_0A equ 0x3FC + 409: - 03ED param_0A equ 0x3ED + 410: - 040B param_10 equ 0x40B + 411: - 041B param_11 equ 0x41B + 412: - 042A param_11_12 equ 0x42A + 413: - 044A param_11_12_all equ 0x44A + 414: - 043D param_11_12_def equ 0x43D + 415: - 0442 param_11_12_ix equ 0x442 + 416: - 0447 param_11_12_iy equ 0x447 + 417: - 0423 param_12 equ 0x423 + 418: - 045B param_13 equ 0x45B + 419: - 047A param_80 equ 0x47A + 420: - 0481 param_80_seek equ 0x481 + 421: - 0471 param_81 equ 0x471 + 422: - 04B5 param_comma equ 0x4B5 + 423: - 0490 param_printRegister equ 0x490 + 424: - 04AE param_printRegisterA equ 0x4AE + 425: - 04A6 param_printRegisterHL equ 0x4A6 + 426: - 0107 print_a_hex equ 0x107 + 427: - 0119 print_bcd equ 0x119 + 428: - 00D7 print_char equ 0xD7 + 429: - 00EA print_clear equ 0xEA + 430: - 00F1 print_newLine equ 0xF1 + 431: - 00DF print_str equ 0xDF + 432: - 00E9 print_str_end equ 0xE9 + 433: - 1763 print_str_fixed equ 0x1763 + 434: - 00FC print_wait_out equ 0xFC + 435: - 0131 read_bcd equ 0x131 + 436: - 011F read_char equ 0x11F + 437: - 14BE read_lba_sector equ 0x14BE + 438: - 1508 str_dev_done equ 0x1508 + 439: - 14F0 str_dev_waitready equ 0x14F0 + 440: - 0E37 str_error_start equ 0xE37 + 441: - 0E54 str_error_start1 equ 0xE54 + 442: - 0E5D str_error_start2 equ 0xE5D + 443: - 0E66 str_error_time equ 0xE66 + 444: - 1DFC str_post_apu equ 0x1DFC + 445: - 1DAB str_post_ide_30 equ 0x1DAB + 446: - 1DC6 str_post_ide_40 equ 0x1DC6 + 447: - 1E32 str_post_nd equ 0x1E32 + 448: - 1E6A str_post_ok equ 0x1E6A + 449: - 1DE1 str_post_pio equ 0x1DE1 + 450: - 1E17 str_post_rtc equ 0x1E17 + 451: - 1E40 str_post_rtc_iv equ 0x1E40 + 452: - 400A var_apu_present equ 0x400A + 453: - 402B var_buffer equ 0x402B + 454: - 4000 var_buffer_len equ 0x4000 + 455: - 411A var_bytes_count equ 0x411A + 456: - 4006 var_curserchar equ 0x4006 + 457: - 4007 var_curserlastaddr equ 0x4007 + 458: - 4005 var_curseron equ 0x4005 + 459: - 4004 var_curserstate equ 0x4004 + 460: - 4002 var_curserx equ 0x4002 + 461: - 4003 var_cursery equ 0x4003 + 462: - 402C var_idebuffer equ 0x402C + 463: - 4001 var_last_char equ 0x4001 + 464: - 4114 var_opcode equ 0x4114 + 465: - 4116 var_opcode_length equ 0x4116 + 466: - 4119 var_opcode_pcount equ 0x4119 + 467: - 4110 var_opcode_start equ 0x4110 + 468: - 4117 var_opcode_string equ 0x4117 + 469: - 4112 var_opcode_table equ 0x4112 + 470: - 4115 var_opcode_x equ 0x4115 + 471: - 4009 var_pio_present equ 0x4009 + 472: - 401B var_ps2mem equ 0x401B + 473: - 400B var_scratch equ 0x400B **** test.asm **** - 2: - B000 org 0xB000 - 3: ;Testing code - 4: - 5: ;LD HL,MEM_IDE_BUFFER - 6: ;LD B,32 - 7: ;call dump_pretty - 8: 0+17 B000 CD38B0 call find_partition - 9: ;call fat_get_root_table - 10: ;call fat_print_directory - 11: - 12: 17+17 B003 CD42B1 call fat_get_root_table - 13: 34+10 B006 110FB0 LD DE, [str1] - 14: 44+17 B009 CD1AB2 CALL fat_lfs - 15: - 16: 61+10 B00C C39900 JP PROMPT_BEGIN - 17: - 18: - B00F str1: - 19: - B00F 494C4C55 db "ILLUSION.PSG",0 - 53494F4E - 2E505347 + 2: - 8000 org 0x8000 + 3: + 4: - 8000 sel_dsk: + 5: 0+17 8000 CD5A82 call ideif_drv_sel + 6: 17+17 8003 CD3A80 call fat_print_dbg + 7: 34+10 8006 C9 ret + 8: + 9: - 8010 org 0x8010 + 10: 44+17 8010 CD3A80 call fat_print_dbg + 11: 61+10 8013 C9 ret + 12: + 13: - 8020 org 0x8020 + 14: 71+17 8020 CD8583 call fat_print_directory + 15: 88+10 8023 C9 ret + 16: + 17: - 8030 org 0x8030 + 18: 98+10 8030 210600 ld hl,0x0006 + 19: 108+16 8033 223543 ld (MEM_FAT_OF0_CCLUST),hl + 20: 124+17 8036 CDBB85 call fat_getfatsec + 21: 141+10 8039 C9 ret + 22: + 23: - 803A fat_print_dbg: + 24: 151+17 803A CD0C86 call PRINTINLINE + 25: - 803D 0A0D5054 db 10,13,"PTR.MEM_IDE_POINTER: 0x",0 + 522E4D45 + 4D5F4944 + 455F504F + 494E5445 + 523A2020 + 20203078 00 - 20: - B01C str2: - 21: - B01C 48414C4C db "HALLOWLT.TXT",0 - 4F574C54 - 2E545854 + 26: 168+14 805A DD213240 ld ix,MEM_IDE_POINTER + 27: 182+17 805E CD3482 call print_32_hex + 28: 199+17 8061 CD0C86 call PRINTINLINE + 29: - 8064 20207C20 db " | PTR.MEM_IDE_PARTITION: 0x",0 + 20505452 + 2E4D454D + 5F494445 + 5F504152 + 54495449 + 4F4E3A20 + 20203078 00 - 22: - B029 str3: - 23: - B029 54455354 db "TEST",0 + 30: 216+14 8085 DD212E40 ld ix,MEM_IDE_PARTITION + 31: 230+17 8089 CD3482 call print_32_hex + 32: + 33: 247+17 808C CD0C86 call PRINTINLINE + 34: - 808F 0A0D5054 db 10,13,"PTR.MEM_FAT_TMPPOINTER: 0x",0 + 522E4D45 + 4D5F4641 + 545F544D + 50504F49 + 4E544552 + 3A203078 00 - 24: - B02E str4: - 25: - B02E 2E4F5247 db ".ORG",0 + 35: 264+14 80AC DD211D43 ld ix,MEM_FAT_TMPPOINTER + 36: 278+17 80B0 CD3482 call print_32_hex + 37: 295+17 80B3 CD0C86 call PRINTINLINE + 38: - 80B6 20207C20 db " | PTR.MEM_FAT_TMPPOINTER1: 0x",0 + 20505452 + 2E4D454D + 5F464154 + 5F544D50 + 504F494E + 54455231 + 3A203078 00 - 26: - 27: - B033 delay_small: - 28: 71+11 B033 F5 PUSH AF - 29: 82+10 B034 F1 POP AF - 30: 92+11 B035 F5 PUSH AF - 31: 103+10 B036 F1 POP AF - 32: 113+10 B037 C9 RET - 33: - 34: - B038 find_partition: - 35: ;read bootsector - 36: 123+7 B038 3E01 LD A,1 ;read 1 sector - 37: 130+7 B03A 060A LD B,IDE_REG_SECTOR - 38: 137+17 B03C CDB310 CALL ide_regwrite_8 - 39: - 40: 154+7 B03F 3E01 LD A,1 ;read sector 0 - 41: 161+7 B041 060B LD B,IDE_REG_SSECTOR - 42: 168+17 B043 CDB310 CALL ide_regwrite_8 - 43: - 44: 185+7 B046 3E00 LD A,0 ;read cylinder 0 - 45: 192+7 B048 060C LD B,IDE_REG_LCYL - 46: 199+17 B04A CDB310 CALL ide_regwrite_8 - 47: 216+7 B04D 3E00 LD A,0 - 48: 223+7 B04F 060D LD B,IDE_REG_HCYL - 49: 230+17 B051 CDB310 CALL ide_regwrite_8 + 39: 312+14 80D7 DD212143 ld ix,MEM_FAT_TMPPOINTER1 + 40: 326+17 80DB CD3482 call print_32_hex + 41: + 42: 343+17 80DE CD0C86 call PRINTINLINE + 43: - 80E1 0A0D5641 db 10,13,"VAL.MEM_FAT_RESERVED: 0x",0 + 4C2E4D45 + 4D5F4641 + 545F5245 + 53455256 + 45443A20 + 20203078 + 00 + 44: 360+14 80FE DD211743 ld ix,MEM_FAT_RESERVED + 45: 374+17 8102 CD4D82 call print_16_hex + 46: 391+17 8105 CD0C86 call PRINTINLINE + 47: - 8108 20202020 db " | VAL.MEM_FAT_AMOUNT: 0x",0 + 20207C20 + 2056414C + 2E4D454D + 5F464154 + 5F414D4F + 554E543A + 20202020 + 20203078 + 00 + 48: 408+13 812D 3A1943 ld a,(MEM_FAT_AMOUNT) + 49: 421+17 8130 CD0701 call print_a_hex 50: - 51: 247+7 B054 3EA0 LD A,10100000b ;read head 0 - 52: 254+7 B056 060E LD B,IDE_REG_HEAD - 53: 261+17 B058 CDB310 CALL ide_regwrite_8 - 54: - 55: 278+7 B05B 3E20 LD A,IDE_CMD_READSEC ;send read command - 56: 285+7 B05D 060F LD B,IDE_REG_CMDSTS - 57: 292+17 B05F CDB310 CALL ide_regwrite_8 - 58: - 59: 309+10 B062 214150 LD HL,MEM_IDE_BUFFER ;set read/write buffer start address - 60: 319+17 B065 CD1D11 call ide_readsector_512_inv ;read 256 words from device - 61: - 62: 336+7 B068 0604 LD B,4 ;Partition table length - 63: 343+7 B06A 0E00 LD C,0 ;Partition ID counter - 64: 350+14 B06C DD21FF51 LD IX,MEM_IDE_BUFFER+446 ;Load offest of first partition table entry - 65: - B070 find_partition_loop: - 66: 364+19 B070 DD7E04 LD A,(IX+4) ;load status byte - 67: 383+4 B073 B7 OR A - 68: 387+10 B074 C28CB0 JP NZ, find_partition_process ;If not zero, jump to print function - 69: 397+10 B077 C37AB0 jp find_partition_next - 70: - 71: - B07A find_partition_next: - 72: 407+7 B07A 3E0A LD A,10 ;New line - 73: 414+17 B07C CDB702 CALL print_char - 74: 431+7 B07F 3E0D LD A,13 - 75: 438+17 B081 CDB702 CALL print_char - 76: 455+10 B084 111000 LD DE,16 - 77: 465+15 B087 DD19 ADD IX,DE - 78: 480+8+5 B089 10E5 DJNZ find_partition_loop - 79: 488+10 B08B C9 RET + 51: 438+17 8133 CD0C86 call PRINTINLINE + 52: - 8136 0A0D5641 db 10,13,"VAL.MEM_FAT_SECTORS: 0x",0 + 4C2E4D45 + 4D5F4641 + 545F5345 + 43544F52 + 533A2020 + 20203078 + 00 + 53: 455+14 8153 DD211A43 ld ix,MEM_FAT_SECTORS + 54: 469+17 8157 CD4D82 call print_16_hex + 55: 486+17 815A CD0C86 call PRINTINLINE + 56: - 815D 20202020 db " | VAL.MEM_FAT_COUNT1: 0x",0 + 20207C20 + 2056414C + 2E4D454D + 5F464154 + 5F434F55 + 4E54313A + 20202020 + 20203078 + 00 + 57: 503+13 8182 3A1C43 ld a,(MEM_FAT_COUNT1) + 58: 516+17 8185 CD0701 call print_a_hex + 59: + 60: 533+17 8188 CD0C86 call PRINTINLINE + 61: - 818B 0A0D5641 db 10,13,"VAL.MEM_FAT_OF0_CCLUST: 0x",0 + 4C2E4D45 + 4D5F4641 + 545F4F46 + 305F4343 + 4C555354 + 3A203078 + 00 + 62: 550+14 81A8 DD213543 ld ix,MEM_FAT_OF0_CCLUST + 63: 564+17 81AC CD4D82 call print_16_hex + 64: 581+17 81AF CD0C86 call PRINTINLINE + 65: - 81B2 20202020 db " | PTR.MEM_FAT_OF0_FATSEC: 0x",0 + 20207C20 + 20505452 + 2E4D454D + 5F464154 + 5F4F4630 + 5F464154 + 5345433A + 20203078 + 00 + 66: 598+14 81D7 DD213743 ld ix,MEM_FAT_OF0_FATSEC + 67: 612+17 81DB CD3482 call print_32_hex + 68: + 69: 629+17 81DE CD0C86 call PRINTINLINE + 70: - 81E1 0A0D5641 db 10,13,"VAL.MEM_FAT_OF0_DATSEC: 0x",0 + 4C2E4D45 + 4D5F4641 + 545F4F46 + 305F4441 + 54534543 + 3A203078 + 00 + 71: 646+14 81FE DD213B43 ld ix,MEM_FAT_OF0_DATSEC + 72: 660+17 8202 CD3482 call print_32_hex + 73: 677+17 8205 CD0C86 call PRINTINLINE + 74: - 8208 20207C20 db " | PTR.MEM_FAT_OF0_DATREM: 0x",0 + 20505452 + 2E4D454D + 5F464154 + 5F4F4630 + 5F444154 + 52454D3A + 20203078 + 00 + 75: 694+14 8229 DD213F43 ld ix,MEM_FAT_OF0_DATREM + 76: 708+17 822D CD4D82 call print_16_hex + 77: + 78: 725+17 8230 CDF100 call print_newLine + 79: 742+10 8233 C9 ret 80: - 81: - B08C find_partition_process: ; process table entry - 82: 498+10 B08C 2104B1 ld hl, [str_part_seek_1] - 83: 508+17 B08F CDBF02 call print_str ;print - 84: 525+19 B092 DD7E04 LD A,(IX+0x04) ;load type - 85: 544+17 B095 CDE702 call print_a_hex - 86: 561+19 B098 DD7E04 LD A,(IX+0x04) ;load type - 87: 580+7 B09B FE0E CP 0x0E - 88: 587+7+5 B09D 20DB JR NZ, find_partition_next - 89: - 90: 594+10 B09F 210FB1 ld hl, [str_part_seek_2] - 91: 604+17 B0A2 CDBF02 call print_str ;print - 92: 621+10 B0A5 2118B1 ld hl, [str_part_seek_3] - 93: 631+17 B0A8 CDBF02 call print_str ;print - 94: - 95: 648+19 B0AB DD7E08 LD A,(IX+0x08) ;load start LBA - 96: 667+13 B0AE 320550 LD (MEM_IDE_PARTITION+3),A - 97: 680+19 B0B1 DD7E09 LD A,(IX+0x09) ;load start LBA - 98: 699+13 B0B4 320450 LD (MEM_IDE_PARTITION+2),A - 99: 712+19 B0B7 DD7E0A LD A,(IX+0x0A) ;load start LBA - 100: 731+13 B0BA 320350 LD (MEM_IDE_PARTITION+1),A - 101: 744+19 B0BD DD7E0B LD A,(IX+0x0B) ;load start LBA - 102: 763+13 B0C0 320250 LD (MEM_IDE_PARTITION+0),A - 103: - 104: 776+13 B0C3 3A0550 LD A,(MEM_IDE_PARTITION+3) - 105: 789+17 B0C6 CDE702 call print_a_hex - 106: 806+13 B0C9 3A0450 LD A,(MEM_IDE_PARTITION+2) - 107: 819+17 B0CC CDE702 call print_a_hex - 108: 836+13 B0CF 3A0350 LD A,(MEM_IDE_PARTITION+1) - 109: 849+17 B0D2 CDE702 call print_a_hex - 110: 866+13 B0D5 3A0250 LD A,(MEM_IDE_PARTITION+0) - 111: 879+17 B0D8 CDE702 call print_a_hex - 112: 896+10 B0DB 2121B1 ld hl, [str_part_seek_4] - 113: 906+17 B0DE CDBF02 call print_str ;print - 114: 923+19 B0E1 DD7E0C LD A,(IX+0x0C) ;load count LBA - 115: 942+17 B0E4 CDE702 call print_a_hex - 116: 959+19 B0E7 DD7E0D LD A,(IX+0x0D) ;load count LBA - 117: 978+17 B0EA CDE702 call print_a_hex - 118: 995+19 B0ED DD7E0E LD A,(IX+0x0E) ;load count LBA - 119: 1014+17 B0F0 CDE702 call print_a_hex - 120: 1031+19 B0F3 DD7E0F LD A,(IX+0x0F) ;load count LBA - 121: 1050+17 B0F6 CDE702 call print_a_hex - 122: 1067+7 B0F9 3E0A LD A,10 ;New line - 123: 1074+17 B0FB CDB702 CALL print_char - 124: 1091+7 B0FE 3E0D LD A,13 - 125: 1098+17 B100 CDB702 CALL print_char - 126: 1115+10 B103 C9 RET - 127: - 128: - B104 str_part_seek_1: - 129: - B104 2D205479 db "- Type: 0x",0 - 70653A20 - 307800 - 130: - B10F str_part_seek_2: - 131: - B10F 20537461 db " State: ",0 - 74653A20 + 81: - 8234 print_32_hex: + 82: 752+19 8234 DD7E03 ld a,(ix+3) + 83: 771+17 8237 CD0701 call print_a_hex + 84: 788+19 823A DD7E02 ld a,(ix+2) + 85: 807+17 823D CD0701 call print_a_hex + 86: 824+19 8240 DD7E01 ld a,(ix+1) + 87: 843+17 8243 CD0701 call print_a_hex + 88: 860+19 8246 DD7E00 ld a,(ix+0) + 89: 879+17 8249 CD0701 call print_a_hex + 90: 896+10 824C C9 ret + 91: + 92: - 824D print_16_hex: + 93: 906+19 824D DD7E01 ld a,(ix+1) + 94: 925+17 8250 CD0701 call print_a_hex + 95: 942+19 8253 DD7E00 ld a,(ix+0) + 96: 961+17 8256 CD0701 call print_a_hex + 97: 978+10 8259 C9 ret + 98: + 99: ; a contains drive to select + 100: ; populate fs vars as well + 101: - 825A ideif_drv_sel: + 102: 988+13 825A 327640 ld (MEM_IDE_SELECTED),a + 103: 1001+11 825D F5 push af + 104: 1012+17 825E CD9714 call ideif_get_drv_pointer ;test if drive is marked as available + 105: 1029+19 8261 DD7E00 ld a,(ix+0) + 106: 1048+4 8264 B7 or a + 107: 1052+10 8265 C28882 jp nz, _ideif_drv_sel_fail ;if not-> fail + 108: + 109: 1062+17 8268 CD0B83 call fat_get_root_table ;else get root table + 110: ;backup tmp pointer + 111: 1079+16 826B 2A3240 ld hl,(MEM_IDE_POINTER) + 112: 1095+20 826E ED5B2E40 ld de,(MEM_IDE_PARTITION) ;use MEM_IDE_PARTITION to backup the pointer + 113: 1115+17 8272 CD5485 call fat_copy_lba_pointer + 114: 1132+10 8275 21A482 ld hl,[_ideif_drv_sel_pstr] ;print success message + 115: 1142+17 8278 CDDF00 call print_str + 116: 1159+10 827B F1 pop af + 117: 1169+7 827C C645 add 69 + 118: 1176+17 827E CDD700 call print_char + 119: 1193+10 8281 21BB82 ld hl,[_ideif_drv_sel_sstr0] + 120: 1203+17 8284 CDDF00 call print_str + 121: 1220+10 8287 C9 ret + 122: - 8288 _ideif_drv_sel_fail: + 123: 1230+10 8288 21A482 ld hl,[_ideif_drv_sel_pstr] + 124: 1240+17 828B CDDF00 call print_str + 125: 1257+10 828E F1 pop af + 126: 1267+7 828F C645 add 69 + 127: 1274+17 8291 CDD700 call print_char + 128: 1291+10 8294 21AD82 ld hl,[_ideif_drv_sel_fstr0] + 129: 1301+17 8297 CDDF00 call print_str + 130: 1318+10 829A 112000 LD DE,0x20 + 131: 1328+10 829D 017000 LD BC,0x70 + 132: 1338+17 82A0 CD170D CALL beep + 133: 1355+10 82A3 C9 ret + 134: + 135: - 82A4 _ideif_drv_sel_pstr: + 136: - 82A4 0A0D4472 db 10,13,"Drive ",0 + 69766520 00 - 132: - B118 str_part_seek_3: - 133: - B118 204C4241 db " LBA: 0x",0 - 3A203078 + 137: - 82AD _ideif_drv_sel_fstr0: + 138: - 82AD 3A206E6F db ": not ready",10,13,0 + 74207265 + 6164790A + 0D00 + 139: - 82BB _ideif_drv_sel_sstr0: + 140: - 82BB 3A207365 db ": selected",10,13,0 + 6C656374 + 65640A0D 00 - 134: - B121 str_part_seek_4: - 135: - B121 204C656E db " Len: 0x",0 - 3A203078 + 141: - 82C8 _ideif_drv_sel_syn: + 142: - 82C8 0A0D496E db 10,13,"Invalid drive letter",10,13,0 + 76616C69 + 64206472 + 69766520 + 6C657474 + 65720A0D 00 - 136: - B12A str_sum: - 137: - B12A 2D2D2D2D db "------------",10,13,0 - 2D2D2D2D - 2D2D2D2D - 0A0D00 - 138: - B139 str_files: - 139: - B139 2046696C db " Files",10,13,0 - 65730A0D - 00 - 140: -**** test.asm **** - 141: .include "include/fat16.s" + 143: .include "fat16.s" ;include monitor symbols. **** include/fat16.s **** 1: ; VARS 2: - 3: - 500A MEM_FAT_RESERVED .EQU MEM_IDE_BASE + 10 ; Reserved sectors (2byte) - 4: - 500C MEM_FAT_AMOUNT .EQU MEM_IDE_BASE + 12 ; Amount of FATs (1byte) - 5: - 500D MEM_FAT_SECTORS .EQU MEM_IDE_BASE + 13 ; Length of FAT (2byte) - 6: - 7: - 500F MEM_FAT_COUNT1 .EQU MEM_IDE_BASE + 15 ;Counter Var for reading FAT (2byte) - 8: - 9: ;------------------------------------- - 10: ; Get FAT Root-Table position - 11: ;------------------------------------- - 12: - B142 fat_get_root_table: - 13: 1125+17 B142 CDA7B2 call fat_reset_pointer ;reset fat pointer - 14: ; Load first sector on active partition - 15: 1142+10 B145 210250 LD HL, MEM_IDE_PARTITION ; pointer to LBA address - 16: 1152+7 B148 3E01 LD A,1 ;read 1 sector - 17: 1159+17 B14A CD5612 call read_lba_sector + 3: - 4317 phase MEM_IDE_FSBUFFER + 4: - 4317 MEM_FAT_RESERVED: ; Reserved sectors (2byte) + 5: - 4317 ..4318 00 defs 2 + 6: - 4319 MEM_FAT_AMOUNT: ; Amount of FATs (1byte) + 7: - 4319 ..4319 00 defs 1 + 8: - 431A MEM_FAT_SECTORS: ; Length of FAT (2byte) + 9: - 431A ..431B 00 defs 2 + 10: - 431C MEM_FAT_COUNT1: ; Counter Var for reading FAT (2byte) + 11: - 431C ..431C 00 defs 1 + 12: - 431D MEM_FAT_TMPPOINTER: ; Temporary working pointer + 13: - 431D ..4320 00 defs 4 + 14: - 4321 MEM_FAT_TMPPOINTER1: ; Temporary working pointer + 15: - 4321 ..4324 00 defs 4 + 16: - 4325 MEM_FAT_TMPFNAME: ; Temporary filename + 17: - 4325 ..4334 00 defs 16 18: - 19: ; Read and store FS Properties - 20: 1176+14 B14D DD214150 LD IX,MEM_IDE_BUFFER - 21: 1190+19 B151 DD7E0E LD A,(IX+0x0E) - 22: 1209+13 B154 320A50 LD (MEM_FAT_RESERVED),A - 23: 1222+19 B157 DD7E0F LD A,(IX+0x0F) - 24: 1241+13 B15A 320B50 LD (MEM_FAT_RESERVED+1),A - 25: 1254+19 B15D DD7E10 LD A,(IX+0x10) - 26: 1273+13 B160 320C50 LD (MEM_FAT_AMOUNT),A - 27: 1286+19 B163 DD7E16 LD A,(IX+0x16) - 28: 1305+13 B166 320D50 LD (MEM_FAT_SECTORS),A - 29: 1318+19 B169 DD7E17 LD A,(IX+0x17) - 30: 1337+13 B16C 320E50 LD (MEM_FAT_SECTORS+1),A - 31: - 32: ;Get Root FAT - 33: 1350+13 B16F 3A0E50 LD A, (MEM_FAT_SECTORS+1) ; load FAT Sector size to DE - 34: 1363+4 B172 57 LD D,A - 35: 1367+13 B173 3A0D50 LD A, (MEM_FAT_SECTORS) - 36: 1380+4 B176 5F LD E,A - 37: 1384+4 B177 AF XOR A ; clear HL - 38: 1388+4 B178 67 LD H,A - 39: 1392+4 B179 6F LD L,A - 40: 1396+13 B17A 3A0C50 LD A,(MEM_FAT_AMOUNT) ; Load counter for multiplication - 41: 1409+4 B17D 47 LD B,A - 42: - B17E _fat_get_root_table_loop: ; multiply - 43: 1413+11 B17E 19 ADD HL,DE - 44: 1424+8+5 B17F 10FD DJNZ _fat_get_root_table_loop - 45: - 46: ; add reserved sectors - 47: 1432+7 B181 1600 LD D,0 - 48: 1439+13 B183 3A0A50 LD A,(MEM_FAT_RESERVED) - 49: 1452+4 B186 5F LD E,A - 50: 1456+11 B187 19 ADD HL,DE - 51: - 52: ; add - 53: 1467+17 B188 CD84B2 call _fat_math_sector_add_16 - 54: 1484+10 B18B C9 ret - 55: - 56: ;------------------------------------- - 57: ; Print current fat directory of MEM_IDE_POINTER - 58: ;------------------------------------- - 59: - B18C fat_print_directory: - 60: 1494+7 B18C 3E0A LD A,10 ;New line - 61: 1501+17 B18E CDB702 CALL print_char - 62: 1518+7 B191 3E0D LD A,13 - 63: 1525+17 B193 CDB702 CALL print_char - 64: - 65: 1542+20 B196 ED5B0D50 LD DE,(MEM_FAT_SECTORS) - 66: 1562+20 B19A ED530F50 LD (MEM_FAT_COUNT1),DE - 67: 1582+10 B19E 210650 LD HL,MEM_IDE_POINTER ;read first sector - 68: 1592+7 B1A1 0601 LD B,1 - 69: 1599+17 B1A3 CD5612 call read_lba_sector - 70: - 71: 1616+10 B1A6 214150 LD HL, MEM_IDE_BUFFER ;set buffer start - 72: 1626+7 B1A9 0E10 LD C,16 ;set entries counter - 73: - 74: - B1AB _fat_print_directory_loop: ;loop over each entry (32byte) - 75: 1633+7 B1AB 7E LD A,(HL) ; check first byte - 76: 1640+11 B1AC E5 PUSH HL ;backup start of entry - 77: ;ignore unwanted entries - 78: 1651+7 B1AD FE41 CP 0x41 ;skip invisible - 79: 1658+7+5 B1AF 2826 JR Z, _fat_print_directory_loop_next - 80: 1665+7 B1B1 FEE5 CP 0xE5 ;skip deleted - 81: 1672+7+5 B1B3 2822 JR Z, _fat_print_directory_loop_next - 82: 1679+7 B1B5 FE00 CP 0x00 ;reached end - 83: 1686+10 B1B7 CA08B2 JP Z, _fat_print_directory_loop_break - 84: ;print filename - 85: 1696+7 B1BA 0608 LD B,8 - 86: 1703+17 B1BC CD5813 call print_str_fixed - 87: 1720+7 B1BF 3E2E ld A,'.' - 88: 1727+17 B1C1 CDB702 call print_char - 89: 1744+7 B1C4 0603 LD B,3 - 90: 1751+17 B1C6 CD5813 call print_str_fixed - 91: - 92: 1768+7 B1C9 7E LD A,(HL) ; print attribute - 93: 1775+17 B1CA CDB702 call print_char - 94: - 95: 1792+7 B1CD 3E0A LD A,10 ;New line - 96: 1799+17 B1CF CDB702 CALL print_char - 97: 1816+7 B1D2 3E0D LD A,13 - 98: 1823+17 B1D4 CDB702 CALL print_char - 99: - 100: - 101: - B1D7 _fat_print_directory_loop_next: ; read next entry - 102: 1840+4 B1D7 0D DEC C ;next sector after 32 entries - 103: 1844+7+5 B1D8 2808 JR Z,_fat_print_directory_loop_next_sector - 104: 1851+10 B1DA E1 POP HL ;restore start - 105: 1861+10 B1DB 112000 LD DE, 32 ;length of entry - 106: 1871+11 B1DE 19 ADD HL,DE ;increment - 107: 1882+10 B1DF C3ABB1 JP _fat_print_directory_loop - 108: - 109: - B1E2 _fat_print_directory_loop_next_sector: ; end fo sector. read next sector from disk - 110: 1892+10 B1E2 E1 POP HL ;clear stack from old hl - 111: 1902+7 B1E3 2600 LD H,0 - 112: 1909+7 B1E5 2E01 LD L,1 - 113: 1916+17 B1E7 CD84B2 call _fat_math_sector_add_16 ;increment sector - 114: - 115: 1933+20 B1EA ED5B0F50 LD DE,(MEM_FAT_COUNT1) ; decrement sector count (max FAT length) - 116: 1953+6 B1EE 1B DEC DE - 117: 1959+20 B1EF ED530F50 LD (MEM_FAT_COUNT1),DE - 118: 1979+4 B1F3 7A LD A,D - 119: 1983+4 B1F4 B3 OR E - 120: 1987+10 B1F5 CA09B2 JP Z, _fat_print_directory_loop_break_dirty ; if DE is 0, mmax is reached. End here - 121: - 122: 1997+10 B1F8 210650 LD HL,MEM_IDE_POINTER ;read next sector - 123: 2007+7 B1FB 0601 LD B,1 - 124: 2014+17 B1FD CD5612 call read_lba_sector - 125: - 126: 2031+10 B200 214150 LD HL, MEM_IDE_BUFFER ;set buffer start - 127: 2041+7 B203 0E10 LD C,16 ;set entries counter - 128: 2048+10 B205 C3ABB1 JP _fat_print_directory_loop - 129: - 130: - B208 _fat_print_directory_loop_break - 131: 2058+10 B208 E1 POP HL - 132: - B209 _fat_print_directory_loop_break_dirty - 133: 2068+10 B209 212AB1 ld hl, [str_sum] - 134: 2078+17 B20C CDBF02 call print_str ;print - 135: 2095+4 B20F 79 ld a,c - 136: 2099+17 B210 CDE702 call print_a_hex - 137: 2116+10 B213 2139B1 ld hl, [str_files] - 138: 2126+17 B216 CDBF02 call print_str ;print - 139: 2143+10 B219 C9 ret - 140: - 141: ;------------------------------------- - 142: ; FAT locate file startcluster - 143: ; - 144: ; DE pointer to file name - 145: ;------------------------------------- - 146: - B21A fat_lfs: - 147: 2153+11 B21A D5 PUSH DE - 148: 2164+10 B21B 211150 LD HL,MEM_IDE_BASE + 17 ; prepare filename - 149: 2174+17 B21E CDCEB2 CALL format_filename_fat16 - 150: - 151: 2191+7 B221 3E10 LD A,16 ;init counter for FAT sectors - 152: 2198+13 B223 320F50 LD (MEM_FAT_COUNT1),A - 153: - 154: 2211+10 B226 210650 LD HL,MEM_IDE_POINTER ;read first sector - 155: 2221+7 B229 0601 LD B,1 - 156: 2228+17 B22B CD5612 call read_lba_sector - 157: - 158: 2245+10 B22E 214150 LD HL, MEM_IDE_BUFFER ;set buffer start - 159: 2255+7 B231 0E10 LD C,16 ;set entries counter - 160: - 161: - B233 _fat_lfs_loop: - 162: 2262+10 B233 D1 POP DE - 163: 2272+11 B234 D5 PUSH DE - 164: 2283+17 B235 CDB8B2 CALL compare_filename - 165: 2300+7+5 B238 3833 JR C, _fat_lfs_loop_compare_match ;on match - 166: - 167: ; prepare next entry - 168: 2307+4 B23A 0D DEC C ;next sector after 16 entries - 169: 2311+7+5 B23B 2807 JR Z,_fat_lfs_loop_compare_next_sector - 170: 2318+10 B23D 112000 LD DE, 32 ;length of entry - 171: 2328+11 B240 19 ADD HL,DE ;increment - 172: 2339+10 B241 C333B2 JP _fat_lfs_loop - 173: - 174: - B244 _fat_lfs_loop_compare_next_sector: - 175: 2349+7 B244 2600 LD H,0 - 176: 2356+7 B246 2E01 LD L,1 - 177: 2363+17 B248 CD84B2 call _fat_math_sector_add_16 ;increment sector - 178: 2380+13 B24B 3A0F50 LD A,(MEM_FAT_COUNT1) ; decrement sector count (max FAT length) - 179: 2393+4 B24E 3D DEC A - 180: 2397+13 B24F 320F50 LD (MEM_FAT_COUNT1),A - 181: 2410+10 B252 CA65B2 JP Z, _fat_lfs_loop_compare_end ; if DE is 0, mmax is reached. End here - 182: ;call print_a_hex - 183: - 184: 2420+10 B255 210650 LD HL,MEM_IDE_POINTER ;read next sector - 185: 2430+7 B258 0601 LD B,1 - 186: 2437+17 B25A CD5612 call read_lba_sector - 187: - 188: 2454+10 B25D 214150 LD HL, MEM_IDE_BUFFER ;set buffer start - 189: 2464+7 B260 0E10 LD C,16 ;set entries counter - 190: 2471+10 B262 C333B2 JP _fat_lfs_loop - 191: - 192: - B265 _fat_lfs_loop_compare_end: - 193: 2481+10 B265 D1 POP DE - 194: 2491+10 B266 21F3B2 LD HL, [str_file_notfound] - 195: 2501+17 B269 CDBF02 CALL print_str ;print - 196: 2518+10 B26C C9 RET - 197: - 198: - B26D _fat_lfs_loop_compare_match: - 199: ; get entry - 200: 2528+10 B26D D1 POP DE - 201: 2538+7 B26E 0608 LD B,8 - 202: 2545+17 B270 CD5813 call print_str_fixed - 203: 2562+7 B273 3E2E ld A,'.' - 204: 2569+17 B275 CDB702 call print_char - 205: 2586+7 B278 0603 LD B,3 - 206: 2593+17 B27A CD5813 call print_str_fixed - 207: - 208: 2610+10 B27D 2105B3 LD HL, [str_file_found] - 209: 2620+17 B280 CDBF02 CALL print_str ;print - 210: - 211: 2637+10 B283 C9 RET - 212: + 19: - 4335 MEM_FAT_OF0_CCLUST: ;Current cluster of file + 20: - 4335 0000 defw 0 + 21: - 4337 MEM_FAT_OF0_FATSEC: ;Current sector in FAT + 22: - 4337 ..433A 00 defs 4 + 23: - 433B MEM_FAT_OF0_DATSEC: ;Current sector in Data + 24: - 433B ..433E 00 defs 4 + 25: - 433F MEM_FAT_OF0_DATREM: ;Remaining sector in Data + 26: - 433F ..4340 00 defs 2 + 27: + 28: + 29: - 830B dephase + 30: + 31: ;------------------------------------- + 32: ; Get FAT Root-Table position + 33: ;------------------------------------- + 34: - 830B fat_get_root_table: + 35: 1365+17 830B CD4585 call fat_reset_pointer ;reset fat pointer + 36: + 37: ;call fat_print_dbg + 38: ; Load first sector on active partition + 39: 1382+10 830E 213240 LD HL, MEM_IDE_POINTER ; pointer to LBA address + 40: 1392+7 8311 3E01 LD A,1 ;read 1 sector + 41: 1399+17 8313 CDBE14 call read_lba_sector + 42: + 43: ; check for valid Boot sector + 44: 1416+13 8316 3A1741 ld a,(MEM_IDE_BUFFER) + 45: 1429+7 8319 FEEB cp 0xEB ;first byte should be 0xEB + 46: 1436+10 831B C25D83 jp nz, _fat_get_root_table_invalid + 47: + 48: ;debug sector + 49: ;ld hl, MEM_IDE_BUFFER + 50: ;ld b,20 + 51: ;call dump_pretty + 52: + 53: ; Read and store FS Properties + 54: 1446+14 831E DD211741 LD IX,MEM_IDE_BUFFER + 55: 1460+19 8322 DD7E0E LD A,(IX+0x0E) + 56: 1479+13 8325 321743 LD (MEM_FAT_RESERVED),A + 57: 1492+19 8328 DD7E0F LD A,(IX+0x0F) + 58: 1511+13 832B 321843 LD (MEM_FAT_RESERVED+1),A + 59: 1524+19 832E DD7E10 LD A,(IX+0x10) + 60: 1543+13 8331 321943 LD (MEM_FAT_AMOUNT),A + 61: 1556+19 8334 DD7E16 LD A,(IX+0x16) + 62: 1575+13 8337 321A43 LD (MEM_FAT_SECTORS),A + 63: 1588+19 833A DD7E17 LD A,(IX+0x17) + 64: 1607+13 833D 321B43 LD (MEM_FAT_SECTORS+1),A + 65: + 66: ;Get Root FAT + 67: 1620+13 8340 3A1B43 LD A, (MEM_FAT_SECTORS+1) ; load FAT Sector size to DE + 68: 1633+4 8343 57 LD D,A + 69: 1637+13 8344 3A1A43 LD A, (MEM_FAT_SECTORS) + 70: 1650+4 8347 5F LD E,A + 71: 1654+4 8348 AF XOR A ; clear HL + 72: 1658+4 8349 67 LD H,A + 73: 1662+4 834A 6F LD L,A + 74: 1666+13 834B 3A1943 LD A,(MEM_FAT_AMOUNT) ; Load counter for multiplication + 75: 1679+4 834E 47 LD B,A + 76: - 834F _fat_get_root_table_loop: ; multiply + 77: 1683+11 834F 19 ADD HL,DE + 78: 1694+8+5 8350 10FD DJNZ _fat_get_root_table_loop + 79: + 80: ; add reserved sectors + 81: 1702+7 8352 1600 LD D,0 + 82: 1709+13 8354 3A1743 LD A,(MEM_FAT_RESERVED) + 83: 1722+4 8357 5F LD E,A + 84: 1726+11 8358 19 ADD HL,DE + 85: + 86: ; add + 87: 1737+17 8359 CD0085 call _fat_math_sector_add_16 + 88: 1754+10 835C C9 ret + 89: + 90: - 835D _fat_get_root_table_invalid: + 91: 1764+17 835D CD0C86 call PRINTINLINE + 92: - 8360 0A0D4361 db 10,13,"Cannot find boot sector.",10,13,0 + 6E6E6F74 + 2066696E + 6420626F + 6F742073 + 6563746F + 722E0A0D + 00 + 93: 1781+17 837D CD9714 call ideif_get_drv_pointer + 94: 1798+19 8380 DD360002 ld (ix+0),0x02 + 95: 1817+10 8384 C9 ret + 96: + 97: ;------------------------------------- + 98: ; Print current fat directory of MEM_IDE_POINTER + 99: ;------------------------------------- + 100: - 8385 fat_print_directory: + 101: + 102: 1827+20 8385 ED5B1A43 LD DE,(MEM_FAT_SECTORS) + 103: 1847+20 8389 ED531C43 LD (MEM_FAT_COUNT1),DE + 104: 1867+10 838D 213240 LD HL,MEM_IDE_POINTER ;read first sector + 105: 1877+7 8390 0601 LD B,1 + 106: 1884+17 8392 CDBE14 call read_lba_sector + 107: + 108: 1901+17 8395 CD0C86 call PRINTINLINE + 109: - 8398 0A0D2020 db 10,13," Filename Cluster Size",10,13,0 + 46696C65 + 6E616D65 + 20202020 + 20436C75 + 73746572 + 2053697A + 650A0D00 + 110: + 111: 1918+10 83B8 211741 LD HL, MEM_IDE_BUFFER ;set buffer start + 112: 1928+7 83BB 0E10 LD C,16 ;set entries counter + 113: + 114: - 83BD _fat_print_directory_loop: ;loop over each entry (32byte) + 115: 1935+7 83BD 7E LD A,(HL) ; check first byte + 116: 1942+11 83BE E5 PUSH HL ;backup start of entry + 117: 1953+14 83BF DDE1 POP IX + 118: 1967+11 83C1 E5 PUSH HL + 119: ;ignore unwanted entries + 120: 1978+7 83C2 FE41 CP 0x41 ;skip invisible + 121: 1985+10 83C4 CA6384 JP Z, _fat_print_directory_loop_next + 122: 1995+7 83C7 FEE5 CP 0xE5 ;skip deleted + 123: 2002+10 83C9 CA6384 JP Z, _fat_print_directory_loop_next + 124: 2012+7 83CC FE00 CP 0x00 ;reached end + 125: 2019+10 83CE CA9484 JP Z, _fat_print_directory_loop_break + 126: + 127: ;check file attribute + 128: 2029+19 83D1 DD7E0B ld a,(IX+0x0B) + 129: 2048+7 83D4 FE10 cp 0x10 ;if subdirectors + 130: 2055+10 83D6 CA3184 jp z, _fat_print_directory_dir ;print dir + 131: ;else print file + 132: - 83D9 _fat_print_directory_loop_file + 133: ;print filename + 134: 2065+7 83D9 3E20 ld a,' ' + 135: 2072+17 83DB CDD700 call print_char + 136: 2089+7 83DE 3E20 ld a,' ' + 137: 2096+17 83E0 CDD700 call print_char + 138: 2113+7 83E3 0608 LD B,8 + 139: 2120+17 83E5 CD6317 call print_str_fixed + 140: 2137+7 83E8 3E2E ld A,'.' + 141: 2144+17 83EA CDD700 call print_char + 142: 2161+7 83ED 0603 LD B,3 + 143: 2168+17 83EF CD6317 call print_str_fixed + 144: + 145: 2185+17 83F2 CD0C86 call PRINTINLINE + 146: - 83F5 20307800 db " 0x",0 + 147: ;first cluster number + 148: 2202+19 83F9 DD7E1B ld a,(ix+0x1B) + 149: 2221+17 83FC CD0701 call print_a_hex + 150: 2238+19 83FF DD7E1A ld a,(ix+0x1A) + 151: 2257+17 8402 CD0701 call print_a_hex + 152: 2274+17 8405 CD0C86 call PRINTINLINE + 153: - 8408 20203078 db " 0x",0 + 00 + 154: 2291+19 840D DD7E1F ld a,(ix+0x1F) + 155: 2310+17 8410 CD0701 call print_a_hex + 156: 2327+19 8413 DD7E1E ld a,(ix+0x1E) + 157: 2346+17 8416 CD0701 call print_a_hex + 158: 2363+19 8419 DD7E1D ld a,(ix+0x1D) + 159: 2382+17 841C CD0701 call print_a_hex + 160: 2399+19 841F DD7E1C ld a,(ix+0x1C) + 161: 2418+17 8422 CD0701 call print_a_hex + 162: + 163: 2435+7 8425 3E0A LD A,10 ;New line + 164: 2442+17 8427 CDD700 CALL print_char + 165: 2459+7 842A 3E0D LD A,13 + 166: 2466+17 842C CDD700 CALL print_char + 167: 2483+12 842F 1832 jr _fat_print_directory_loop_next + 168: - 8431 _fat_print_directory_dir + 169: 2495+7 8431 3E44 ld a,'D' + 170: 2502+17 8433 CDD700 call print_char + 171: 2519+7 8436 3E20 ld a,' ' + 172: 2526+17 8438 CDD700 call print_char + 173: 2543+7 843B 0608 LD B,8 + 174: 2550+17 843D CD6317 call print_str_fixed + 175: 2567+17 8440 CD0C86 call PRINTINLINE + 176: - 8443 20202020 db " 0x",0 + 20307800 + 177: ;first cluster number + 178: 2584+19 844B DD7E1B ld a,(ix+0x1B) + 179: 2603+17 844E CD0701 call print_a_hex + 180: 2620+19 8451 DD7E1A ld a,(ix+0x1A) + 181: 2639+17 8454 CD0701 call print_a_hex + 182: + 183: 2656+7 8457 3E0A LD A,10 ;New line + 184: 2663+17 8459 CDD700 CALL print_char + 185: 2680+7 845C 3E0D LD A,13 + 186: 2687+17 845E CDD700 CALL print_char + 187: 2704+12 8461 1800 jr _fat_print_directory_loop_next + 188: + 189: - 8463 _fat_print_directory_loop_next: ; read next entry + 190: 2716+4 8463 0D DEC C ;next sector after 32 entries + 191: 2720+7+5 8464 2808 JR Z,_fat_print_directory_loop_next_sector + 192: 2727+10 8466 E1 POP HL ;restore start + 193: 2737+10 8467 112000 LD DE, 32 ;length of entry + 194: 2747+11 846A 19 ADD HL,DE ;increment + 195: 2758+10 846B C3BD83 JP _fat_print_directory_loop + 196: + 197: - 846E _fat_print_directory_loop_next_sector: ; end fo sector. read next sector from disk + 198: 2768+10 846E E1 POP HL ;clear stack from old hl + 199: 2778+7 846F 2600 LD H,0 + 200: 2785+7 8471 2E01 LD L,1 + 201: 2792+17 8473 CD0085 call _fat_math_sector_add_16 ;increment sector + 202: + 203: 2809+20 8476 ED5B1C43 LD DE,(MEM_FAT_COUNT1) ; decrement sector count (max FAT length) + 204: 2829+6 847A 1B DEC DE + 205: 2835+20 847B ED531C43 LD (MEM_FAT_COUNT1),DE + 206: 2855+4 847F 7A LD A,D + 207: 2859+4 8480 B3 OR E + 208: 2863+10 8481 CA9584 JP Z, _fat_print_directory_loop_break_dirty ; if DE is 0, mmax is reached. End here + 209: + 210: 2873+10 8484 213240 LD HL,MEM_IDE_POINTER ;read next sector + 211: 2883+7 8487 0601 LD B,1 + 212: 2890+17 8489 CDBE14 call read_lba_sector 213: - 214: - 215: ;=================== UTIL Functions =========================== - 216: ; 32 Bit addition to pointer - 217: ; HL has value - 218: - B284 _fat_math_sector_add_16: - 219: 2647+14 B284 DD210650 LD IX,MEM_IDE_POINTER; LOAD IX to sector pointer in memory - 220: 2661+4 B288 7D LD A,L - 221: 2665+19 B289 DD8603 ADD A,(IX+3) - 222: 2684+19 B28C DD7703 LD (IX+3),A - 223: 2703+7+5 B28F 3005 JR NC, _fat_math_sector_add_16_2 ;if no carry, continue - 224: 2710+7 B291 3E01 LD A,1 - 225: 2717+19 B293 DD8602 ADD A,(IX+2) - 226: - B296 _fat_math_sector_add_16_2: - 227: 2736+4 B296 7C LD A,h - 228: 2740+19 B297 DD8602 ADD A,(IX+2) - 229: 2759+19 B29A DD7702 LD (IX+2),A - 230: 2778+5+6 B29D D0 RET NC ;done when no carry - 231: 2783+7 B29E 3E01 LD A,1 - 232: 2790+19 B2A0 DD8601 ADD A,(IX+1) - 233: 2809+19 B2A3 DD7701 LD (IX+1),A - 234: 2828+10 B2A6 C9 RET - 235: - 236: ; reset LBA pointer to first sector in partition - 237: - B2A7 fat_reset_pointer: - 238: 2838+10 B2A7 210250 LD HL,MEM_IDE_PARTITION - 239: 2848+10 B2AA 110650 LD DE,MEM_IDE_POINTER - 240: 2858+12 B2AD 1800 jr fat_copy_lba_pointer + 214: 2907+10 848C 211741 LD HL, MEM_IDE_BUFFER ;set buffer start + 215: 2917+7 848F 0E10 LD C,16 ;set entries counter + 216: 2924+10 8491 C3BD83 JP _fat_print_directory_loop + 217: + 218: - 8494 _fat_print_directory_loop_break + 219: 2934+10 8494 E1 POP HL + 220: - 8495 _fat_print_directory_loop_break_dirty + 221: ; ld hl, [str_sum] + 222: ; call print_str ;print + 223: ; ld a,c + 224: ; call print_a_hex + 225: ; ld hl, [str_files] + 226: ; call print_str ;print + 227: 2944+10 8495 C9 ret + 228: + 229: ;------------------------------------- + 230: ; FAT locate file startcluster + 231: ; + 232: ; DE pointer to file name + 233: ;------------------------------------- + 234: - 8496 fat_lfs: + 235: 2954+11 8496 D5 PUSH DE + 236: 2965+10 8497 212543 LD HL,[MEM_FAT_TMPFNAME] ; prepare filename + 237: 2975+17 849A CD7385 CALL format_filename_fat16 + 238: + 239: 2992+7 849D 3E10 LD A,16 ;init counter for FAT sectors + 240: 2999+13 849F 321C43 LD (MEM_FAT_COUNT1),A 241: - 242: ; resets LBA pointer (4-byte) to partition start - 243: ; HL = from here - 244: ; DE = to this destimation - 245: - B2AF fat_copy_lba_pointer: - 246: 2870+11 B2AF C5 PUSH BC - 247: 2881+7 B2B0 0600 LD B,0 - 248: 2888+7 B2B2 0E04 LD C,4 - 249: 2895+16+5 B2B4 EDB0 LDIR - 250: 2911+10 B2B6 C1 POP BC - 251: 2921+10 B2B7 C9 ret - 252: - 253: ; compares filenames - 254: ; HL points to name1 - 255: ; DE points to name2 - 256: ; Carry is set if match - 257: ; Destroys DE, AF - 258: - B2B8 compare_filename: - 259: 2931+11 B2B8 E5 PUSH HL - 260: 2942+11 B2B9 C5 PUSH BC - 261: 2953+7 B2BA 060B LD B, 11 ;Counter - 262: - B2BC _compare_filename_loop: - 263: 2960+7 B2BC 1A LD A,(DE) - 264: 2967+4 B2BD 4F LD C,A - 265: 2971+7 B2BE 7E LD A,(HL) - 266: 2978+4 B2BF A9 XOR C ;check if identical (should return 0) - 267: 2982+7+5 B2C0 2007 JR NZ, _compare_filename_nomatch - 268: 2989+4 B2C2 05 DEC B ;decrement counter - 269: 2993+7+5 B2C3 20F7 JR NZ, _compare_filename_loop ;if not last, continue - 270: 3000+10 B2C5 C1 POP BC ;if last, it matches - 271: 3010+10 B2C6 E1 POP HL - 272: 3020+4 B2C7 37 SCF - 273: 3024+10 B2C8 C9 RET - 274: - B2C9 _compare_filename_nomatch: - 275: 3034+10 B2C9 C1 POP BC - 276: 3044+10 B2CA E1 POP HL - 277: 3054+4 B2CB 37 SCF - 278: 3058+4 B2CC 3F CCF - 279: 3062+10 B2CD C9 RET - 280: - 281: ; formats filename to 8+3 format - 282: ; DE points to source filename to string - 283: ; HL points to destination - 284: - B2CE format_filename_fat16: - 285: 3072+7 B2CE 060B LD B, 11 ;counter - 286: 3079+11 B2D0 E5 PUSH HL - 287: 3090+4 B2D1 AF XOR A - 288: - B2D2 _format_filename_fat16_clean: - 289: 3094+7 B2D2 77 LD (HL),A - 290: 3101+6 B2D3 23 INC HL - 291: 3107+8+5 B2D4 10FC DJNZ _format_filename_fat16_clean - 292: 3115+10 B2D6 E1 POP HL ; continue with copy - 293: 3125+7 B2D7 060D LD B, 13 - 294: - B2D9 _format_filename_fat16_loop: - 295: 3132+7 B2D9 1A LD A, (DE) ; load byte - 296: 3139+4 B2DA B7 OR A - 297: 3143+5+6 B2DB C8 RET Z ;exit on 0byte - 298: 3148+4 B2DC 05 DEC B ;reduce counter - 299: 3152+5+6 B2DD C8 RET Z ;exit after 12 bytes 8+.+3 - 300: 3157+7 B2DE FE2E CP '.' ; check if dot - 301: 3164+7+5 B2E0 200A JR NZ, _format_filename_fat16_loop_copy ; if not continue as usual - 302: 3171+6 B2E2 13 INC DE ;else skip char - 303: - B2E3 _format_filename_fat16_loop_skip_8: - 304: 3177+4 B2E3 78 LD A,B - 305: 3181+7 B2E4 FE05 CP 5 - 306: 3188+7+5 B2E6 38F1 JR C, _format_filename_fat16_loop - 307: 3195+6 B2E8 23 INC HL - 308: 3201+4 B2E9 05 DEC B - 309: 3205+12 B2EA 18F7 JR _format_filename_fat16_loop_skip_8 - 310: - 311: - B2EC _format_filename_fat16_loop_copy: - 312: 3217+7 B2EC 1A LD A, (DE) ; load byte - 313: 3224+7 B2ED 77 LD (HL), A ; copy byte - 314: 3231+6 B2EE 23 INC HL - 315: 3237+6 B2EF 13 INC DE - 316: 3243+10 B2F0 C3D9B2 JP _format_filename_fat16_loop - 317: - 318: - B2F3 str_file_notfound: - 319: - B2F3 46696C65 db "File not found!",13,10,0 + 242: 3012+10 84A2 213240 LD HL,MEM_IDE_POINTER ;read first sector + 243: 3022+7 84A5 0601 LD B,1 + 244: 3029+17 84A7 CDBE14 call read_lba_sector + 245: + 246: 3046+10 84AA 211741 LD HL, MEM_IDE_BUFFER ;set buffer start + 247: 3056+7 84AD 0E10 LD C,16 ;set entries counter + 248: + 249: - 84AF _fat_lfs_loop: + 250: 3063+10 84AF D1 POP DE + 251: 3073+11 84B0 D5 PUSH DE + 252: 3084+17 84B1 CD5D85 CALL compare_filename + 253: 3101+7+5 84B4 3833 JR C, _fat_lfs_loop_compare_match ;on match + 254: + 255: ; prepare next entry + 256: 3108+4 84B6 0D DEC C ;next sector after 16 entries + 257: 3112+7+5 84B7 2807 JR Z,_fat_lfs_loop_compare_next_sector + 258: 3119+10 84B9 112000 LD DE, 32 ;length of entry + 259: 3129+11 84BC 19 ADD HL,DE ;increment + 260: 3140+10 84BD C3AF84 JP _fat_lfs_loop + 261: + 262: - 84C0 _fat_lfs_loop_compare_next_sector: + 263: 3150+7 84C0 2600 LD H,0 + 264: 3157+7 84C2 2E01 LD L,1 + 265: 3164+17 84C4 CD0085 call _fat_math_sector_add_16 ;increment sector + 266: 3181+13 84C7 3A1C43 LD A,(MEM_FAT_COUNT1) ; decrement sector count (max FAT length) + 267: 3194+4 84CA 3D DEC A + 268: 3198+13 84CB 321C43 LD (MEM_FAT_COUNT1),A + 269: 3211+10 84CE CAE184 JP Z, _fat_lfs_loop_compare_end ; if DE is 0, mmax is reached. End here + 270: ;call print_a_hex + 271: + 272: 3221+10 84D1 213240 LD HL,MEM_IDE_POINTER ;read next sector + 273: 3231+7 84D4 0601 LD B,1 + 274: 3238+17 84D6 CDBE14 call read_lba_sector + 275: + 276: 3255+10 84D9 211741 LD HL, MEM_IDE_BUFFER ;set buffer start + 277: 3265+7 84DC 0E10 LD C,16 ;set entries counter + 278: 3272+10 84DE C3AF84 JP _fat_lfs_loop + 279: + 280: - 84E1 _fat_lfs_loop_compare_end: + 281: 3282+10 84E1 D1 POP DE + 282: 3292+10 84E2 219885 LD HL, [str_file_notfound] + 283: 3302+17 84E5 CDDF00 CALL print_str ;print + 284: 3319+10 84E8 C9 RET + 285: + 286: - 84E9 _fat_lfs_loop_compare_match: + 287: ; get entry + 288: 3329+10 84E9 D1 POP DE + 289: 3339+7 84EA 0608 LD B,8 + 290: 3346+17 84EC CD6317 call print_str_fixed + 291: 3363+7 84EF 3E2E ld A,'.' + 292: 3370+17 84F1 CDD700 call print_char + 293: 3387+7 84F4 0603 LD B,3 + 294: 3394+17 84F6 CD6317 call print_str_fixed + 295: + 296: 3411+10 84F9 21AA85 LD HL, [str_file_found] + 297: 3421+17 84FC CDDF00 CALL print_str ;print + 298: + 299: 3438+10 84FF C9 RET + 300: + 301: + 302: + 303: ;=================== UTIL Functions =========================== + 304: ; 32 Bit addition to pointer + 305: ; HL has value + 306: - 8500 _fat_math_sector_add_16: + 307: 3448+16 8500 221D43 ld (MEM_FAT_TMPPOINTER), hl + 308: 3464+4 8503 AF xor a + 309: 3468+13 8504 321F43 ld (MEM_FAT_TMPPOINTER+2),a + 310: 3481+13 8507 322043 ld (MEM_FAT_TMPPOINTER+3),a + 311: + 312: 3494+10 850A 111D43 ld de,[MEM_FAT_TMPPOINTER] + 313: 3504+10 850D 013240 ld bc,[MEM_IDE_POINTER] + 314: 3514+17 8510 CD1485 call _fat_math_add32 + 315: 3531+10 8513 C9 ret + 316: + 317: ;bc contains pointer to a (also result) + 318: ;de contains pointer to b + 319: - 8514 _fat_math_add32 + 320: 3541+11 8514 E5 push hl + 321: 3552+11 8515 C5 push bc + 322: 3563+11 8516 D5 push de + 323: 3574+7 8517 1A ld a,(de) ; load lower 16bit for B int from (DE) to HL + 324: 3581+4 8518 6F ld l,a + 325: 3585+6 8519 13 inc de + 326: 3591+7 851A 1A ld a,(de) + 327: 3598+4 851B 67 ld h,a + 328: 3602+6 851C 13 inc de + 329: ; HL, DE dirty + 330: 3608+7 851D 0A ld a,(bc) ; load lower 16bit for A int from (BC) to DE + 331: 3615+4 851E 5F ld e,a + 332: 3619+6 851F 03 inc bc + 333: 3625+7 8520 0A ld a,(bc) + 334: 3632+4 8521 57 ld d,a + 335: ; HL now contains A, DE now contains D + 336: 3636+11 8522 19 add hl,de ;add lower bytes, store carry + 337: 3647+10 8523 D1 pop de ;restore pointers + 338: 3657+10 8524 C1 pop bc ;both now cointain first byte of long-value + 339: 3667+4 8525 7D ld a,l ;store lower result in (bc) + 340: 3671+7 8526 02 ld (bc),a + 341: 3678+6 8527 03 inc bc + 342: 3684+4 8528 7C ld a,h + 343: 3688+7 8529 02 ld (bc),a + 344: 3695+6 852A 03 inc bc + 345: 3701+6 852B 13 inc de ;also increment de to next byte + 346: 3707+6 852C 13 inc de + 347: ; DE and HL now start at the upper byte + 348: 3713+11 852D C5 push bc + 349: 3724+11 852E D5 push de + 350: 3735+7 852F 1A ld a,(de) ; load upper 16bit for B + 351: 3742+4 8530 6F ld l,a + 352: 3746+6 8531 13 inc de + 353: 3752+7 8532 1A ld a,(de) + 354: 3759+4 8533 67 ld h,a + 355: 3763+6 8534 13 inc de + 356: 3769+7 8535 0A ld a,(bc) ; load upper 16bit for A + 357: 3776+4 8536 5F ld e,a + 358: 3780+6 8537 03 inc bc + 359: 3786+7 8538 0A ld a,(bc) + 360: 3793+4 8539 57 ld d,a + 361: 3797+15 853A ED5A adc hl,de ;add upper bytes, store carry + 362: 3812+10 853C D1 pop de + 363: 3822+10 853D C1 pop bc + 364: 3832+4 853E 7D ld a,l ;store lower result in (bc) + 365: 3836+7 853F 02 ld(bc),a + 366: 3843+6 8540 03 inc bc + 367: 3849+4 8541 7C ld a,h + 368: 3853+7 8542 02 ld(bc),a + 369: 3860+10 8543 E1 pop hl + 370: 3870+10 8544 C9 ret + 371: + 372: ; reset LBA pointer to first sector in selected partition + 373: - 8545 fat_reset_pointer: + 374: 3880+17 8545 CD9714 call ideif_get_drv_pointer + 375: 3897+10 8548 DD23 inc ix + 376: 3907+10 854A DD23 inc ix + 377: 3917+15 854C DDE5 push ix + 378: 3932+10 854E E1 pop hl ;copy poiter to hl + 379: 3942+10 854F 113240 ld de, MEM_IDE_POINTER + 380: 3952+12 8552 1800 jr fat_copy_lba_pointer + 381: + 382: ; resets LBA pointer (4-byte) to partition start + 383: ; HL = from here + 384: ; DE = to this destimation + 385: - 8554 fat_copy_lba_pointer: + 386: 3964+11 8554 C5 PUSH BC + 387: 3975+7 8555 0600 LD B,0 + 388: 3982+7 8557 0E04 LD C,4 + 389: 3989+16+5 8559 EDB0 LDIR + 390: 4005+10 855B C1 POP BC + 391: 4015+10 855C C9 ret + 392: + 393: ; compares filenames + 394: ; HL points to name1 + 395: ; DE points to name2 + 396: ; Carry is set if match + 397: ; Destroys DE, AF + 398: - 855D compare_filename: + 399: 4025+11 855D E5 PUSH HL + 400: 4036+11 855E C5 PUSH BC + 401: 4047+7 855F 060B LD B, 11 ;Counter + 402: - 8561 _compare_filename_loop: + 403: 4054+7 8561 1A LD A,(DE) + 404: 4061+4 8562 4F LD C,A + 405: 4065+7 8563 7E LD A,(HL) + 406: 4072+4 8564 A9 XOR C ;check if identical (should return 0) + 407: 4076+7+5 8565 2007 JR NZ, _compare_filename_nomatch + 408: 4083+4 8567 05 DEC B ;decrement counter + 409: 4087+7+5 8568 20F7 JR NZ, _compare_filename_loop ;if not last, continue + 410: 4094+10 856A C1 POP BC ;if last, it matches + 411: 4104+10 856B E1 POP HL + 412: 4114+4 856C 37 SCF + 413: 4118+10 856D C9 RET + 414: - 856E _compare_filename_nomatch: + 415: 4128+10 856E C1 POP BC + 416: 4138+10 856F E1 POP HL + 417: 4148+4 8570 37 SCF + 418: 4152+4 8571 3F CCF + 419: 4156+10 8572 C9 RET + 420: + 421: ; formats filename to 8+3 format + 422: ; DE points to source filename to string + 423: ; HL points to destination + 424: - 8573 format_filename_fat16: + 425: 4166+7 8573 060B LD B, 11 ;counter + 426: 4173+11 8575 E5 PUSH HL + 427: 4184+4 8576 AF XOR A + 428: - 8577 _format_filename_fat16_clean: + 429: 4188+7 8577 77 LD (HL),A + 430: 4195+6 8578 23 INC HL + 431: 4201+8+5 8579 10FC DJNZ _format_filename_fat16_clean + 432: 4209+10 857B E1 POP HL ; continue with copy + 433: 4219+7 857C 060D LD B, 13 + 434: - 857E _format_filename_fat16_loop: + 435: 4226+7 857E 1A LD A, (DE) ; load byte + 436: 4233+4 857F B7 OR A + 437: 4237+5+6 8580 C8 RET Z ;exit on 0byte + 438: 4242+4 8581 05 DEC B ;reduce counter + 439: 4246+5+6 8582 C8 RET Z ;exit after 12 bytes 8+.+3 + 440: 4251+7 8583 FE2E CP '.' ; check if dot + 441: 4258+7+5 8585 200A JR NZ, _format_filename_fat16_loop_copy ; if not continue as usual + 442: 4265+6 8587 13 INC DE ;else skip char + 443: - 8588 _format_filename_fat16_loop_skip_8: + 444: 4271+4 8588 78 LD A,B + 445: 4275+7 8589 FE05 CP 5 + 446: 4282+7+5 858B 38F1 JR C, _format_filename_fat16_loop + 447: 4289+6 858D 23 INC HL + 448: 4295+4 858E 05 DEC B + 449: 4299+12 858F 18F7 JR _format_filename_fat16_loop_skip_8 + 450: + 451: - 8591 _format_filename_fat16_loop_copy: + 452: 4311+7 8591 1A LD A, (DE) ; load byte + 453: 4318+7 8592 77 LD (HL), A ; copy byte + 454: 4325+6 8593 23 INC HL + 455: 4331+6 8594 13 INC DE + 456: 4337+10 8595 C37E85 JP _format_filename_fat16_loop + 457: + 458: - 8598 str_file_notfound: + 459: - 8598 46696C65 db "File not found!",13,10,0 206E6F74 20666F75 6E64210D 0A00 - 320: - 321: - B305 str_file_found: + 460: + 461: - 85AA str_file_found: **** test.asm **** - 142: - B305 2046696C db " File located!",13,10,0 + 144: - 85AA 2046696C db " File located!",13,10,0 65206C6F 63617465 64210D0A 00 + 145: .include "fat16_file.s" ;include monitor symbols. +**** include/fat16_file.s **** + 1: + 2: + 3: ;1. find sector for given cluster + 4: ;2. read sector + 5: ;3. store first data sector to MEM_FAT_OF0_DATSEC + 6: ;4. set MEM_FAT_OF0_DATREM to amount uf sectors per cluster + 7: ;5. find next cluster in FAt and update MEM_FAT_OF0_CCLUST + 8: + 9: + 10: ; gets sector in FAT table for the cluster stored in MEM_FAT_OF0_CCLUST + 11: ; store result in MEM_FAT_OF0_FATSEC + 12: - 85BB fat_getfatsec: + 13: 4347+16 85BB 2A3543 ld HL,(MEM_FAT_OF0_CCLUST) ;load cluster + 14: ;each sector contains 256 clusters + 15: ;first 8bits are not needed (/256) + 16: + 17: 4363+4 85BE 7C ld a,h ;divide by 256 + 18: 4367+4 85BF 6F ld l,a + 19: 4371+4 85C0 AF xor a + 20: 4375+4 85C1 67 ld h,a + 21: + 22: 4379+20 85C2 ED4B1743 ld bc,(MEM_FAT_RESERVED) ;add reserved sectors + 23: 4399+11 85C6 09 add hl,bc + 24: 4410+16 85C7 223743 ld(MEM_FAT_OF0_FATSEC+0),hl;store sector to MEM_FAT_TMPPOINTER1 + 25: 4426+4 85CA AF xor a + 26: 4430+13 85CB 323943 ld(MEM_FAT_OF0_FATSEC+2),a + 27: 4443+13 85CE 323A43 ld(MEM_FAT_OF0_FATSEC+3),a + 28: + 29: 4456+17 85D1 CD9714 call ideif_get_drv_pointer + 30: 4473+10 85D4 DD23 inc ix + 31: 4483+10 85D6 DD23 inc ix + 32: 4493+15 85D8 DDE5 push ix + 33: 4508+10 85DA D1 pop de ;copy poiter to hl + 34: 4518+10 85DB 013743 ld bc,[MEM_FAT_OF0_FATSEC] + 35: 4528+17 85DE CD1485 call _fat_math_add32 ;MEM_FAT_OF0_FATSEC now contains the correct sector + 36: ;in the FAT + 37: + 38: 4545+17 85E1 CD3A80 call fat_print_dbg + 39: + 40: ;read FAT sector + 41: 4562+10 85E4 213743 ld hl,MEM_FAT_OF0_FATSEC ;read next sector + 42: 4572+7 85E7 0601 ld b,1 + 43: 4579+17 85E9 CDBE14 call read_lba_sector + 44: + 45: 4596+10 85EC 211741 ld hl, MEM_IDE_BUFFER + 46: 4606+7 85EF 0614 ld b,20 + 47: 4613+17 85F1 CDC916 call dump_pretty + 48: + 49: ;calculate offset address + 50: 4630+13 85F4 3A3543 ld a,(MEM_FAT_OF0_CCLUST) + 51: 4643+4 85F7 17 RLA ;shift to left (x2) + 52: 4647+4 85F8 6F ld l, a + 53: 4651+7 85F9 3E00 ld a,0 + 54: 4658+4 85FB 17 RLA ;shift in carry flag + 55: 4662+4 85FC 67 ld h,a + 56: 4666+10 85FD 111741 ld de,MEM_IDE_BUFFER + 57: 4676+11 8600 19 add hl,de + 58: ;copy pointer + 59: 4687+10 8601 113543 ld de,MEM_FAT_OF0_CCLUST + 60: 4697+16 8604 EDA0 ldi ;copy byte for next cluster from FAT + 61: 4713+16 8606 EDA0 ldi + 62: + 63: + 64: 4729+17 8608 CD3A80 call fat_print_dbg + 65: + 66: 4746+10 860B C9 ret + 67: ;store data + 68: +**** test.asm **** + 146: + 147: ;------------------------------------------------------------------------------ + 148: ; PRINTINLINE + 149: ; + 150: ; String output function + 151: ; + 152: ; Prints in-line data (bytes immediately following the PRINTINLINE call) + 153: ; until a string terminator is encountered (0 - null char). + 154: ;------------------------------------------------------------------------------ + 155: - 860C PRINTINLINE: + 156: 4756+19 860C E3 EX (SP),HL ; PUSH HL and put RET ADDress into HL + 157: 4775+11 860D F5 PUSH AF + 158: 4786+11 860E C5 PUSH BC + 159: - 860F nxtILC: + 160: 4797+7 860F 7E LD A,(HL) + 161: 4804+7 8610 FE00 CP 0 + 162: 4811+7+5 8612 2806 JR Z,endPrint + 163: 4818+17 8614 CDD700 CALL print_char + 164: 4835+6 8617 23 INC HL + 165: 4841+12 8618 18F5 JR nxtILC + 166: - 861A endPrint: + 167: 4853+6 861A 23 INC HL ; Get past "null" terminator + 168: 4859+10 861B C1 POP BC + 169: 4869+10 861C F1 POP AF + 170: 4879+19 861D E3 EX (SP),HL ; PUSH new RET ADDress on stack and restore HL +**** test.asm **** + 171: 4898+10 861E C9 RET @@ -896,31 +1316,37 @@ Statistics: 4 passes 0 jr promotions - 437 symbols - 790 bytes + 525 symbols + 1534 bytes Symbol Table: -AY0_WRITE_REG =91 145 -A_RTS_OFF = 312 786 -A_RTS_ON = 31B 795 -CMD_DASM = 239 569 -CMD_EXEC = 12F 303 -CMD_IO_READ = 21D 541 -CMD_IO_WRITE = 1F4 500 -CMD_SET = 1B8 440 -CMD_SET_END = 1EE 494 -CMD_SET_LOOP = 1D3 467 -CMD_SYNTAX_ERROR= 272 626 -CMD_VIEW = 14E 334 -CMD_VIEW_END = 1B2 434 -CMD_VIEW_ROW = 187 391 -CMD_VIEW_ROW_LOOP= 199 409 -CONSOLE_INIT = 27E 638 -CONSOLE_INIT_CTC= 27E 638 -CONSOLE_INIT_SIO= 286 646 +ADDR_RTC =D0 208 +A_RTS_OFF = 152 338 +A_RTS_ON = 15B 347 +BOOT_PHASE0 =50 80 +BOOT_PHASE1 =6E 110 +BOOT_PHASE1_LOOP=77 119 +BOOT_PHASE2 =82 130 +COMMAND =17EB 6123 +COMMAND_BACKSPACE=1826 6182 +COMMAND_LUT =176B 5995 +COMMAND_PROCESS=184C 6220 +COMMAND_PROCESS_FOUND=1887 6279 +COMMAND_PROCESS_LOOP=184F 6223 +COMMAND_PROCESS_LOOP_STR1=1858 6232 +COMMAND_PROCESS_LOOP_STR2=186E 6254 +COMMAND_PROCESS_NEXT_ENTRY=1873 6259 +COMMAND_PROCESS_NEXT_ENTRYI=1872 6258 +COMMAND_PROCESS_NOT_FOUND=187E 6270 +COMMAND_READ =17F7 6135 +CONSOLE_INIT =9E 158 +CONSOLE_INIT_CTC=9E 158 +CONSOLE_INIT_SIO=A6 166 +CS_APU_CTRL =F9 249 +CS_APU_DATA =F8 248 CS_BANK =00 0 CS_CTC_0 =04 4 CS_CTC_1 =05 5 @@ -939,16 +1365,18 @@ CS_SIO_A_C =09 9 CS_SIO_A_D =08 8 CS_SIO_B_C =0B 11 CS_SIO_B_D =0A 10 -DHEX_TO_BYTE = 324 804 -DHEX_TO_BYTE_FAILED= 340 832 -EXEC_RST_08 = EC4 3780 -EXEC_RST_10 = EC8 3784 -EXEC_RST_18 = ED4 3796 -HEX_TO_BIN = 344 836 -HEX_TO_BIN_2 = 352 850 -HEX_TO_INVALID_2= 359 857 +DHEX_TO_BYTE = 164 356 +DHEX_TO_BYTE_FAILED= 180 384 +ERR_SYNTAX =189D 6301 +EXEC_RST_08 = D04 3332 +EXEC_RST_10 = D08 3336 +EXEC_RST_18 = D14 3348 +HEX_TO_BIN = 184 388 +HEX_TO_BIN_2 = 192 402 +HEX_TO_INVALID_2= 199 409 IDE_CMD_IDENT =EC 236 IDE_CMD_READSEC=20 32 +IDE_DEV_TABLE =1275 4725 IDE_RD =40 64 IDE_REG_ALTSTS =16 22 IDE_REG_CMDSTS =0F 15 @@ -957,12 +1385,19 @@ IDE_REG_DRVADDR=17 23 IDE_REG_ERROR =09 9 IDE_REG_HCYL =0D 13 IDE_REG_HEAD =0E 14 +IDE_REG_LBA0 =0B 11 +IDE_REG_LBA1 =0C 12 +IDE_REG_LBA2 =0D 13 +IDE_REG_LBA3 =0E 14 IDE_REG_LCYL =0C 12 IDE_REG_SECTOR =0A 10 IDE_REG_SSECTOR=0B 11 IDE_RST =80 128 IDE_WR =20 32 +IIC_CLK =01 1 +IIC_DATA =02 2 INT_VEC =1B 27 +IN_BUFFER =402B 16427 IO_AY0_ADDR =40 64 IO_AY0_DATA =41 65 IO_AY1_ADDR =42 66 @@ -984,323 +1419,415 @@ IO_RTC_SEC1 =21 33 IO_RTC_WEEK =2C 44 IO_RTC_YEAR1 =2B 43 IO_RTC_YERR0 =2A 42 -Includes = 27E 638 -MEM_FAT_AMOUNT =500C 20492 -MEM_FAT_COUNT1 =500F 20495 -MEM_FAT_RESERVED=500A 20490 -MEM_FAT_SECTORS=500D 20493 -MEM_IDE_BASE =5000 20480 -MEM_IDE_BUFFER =5041 20545 -MEM_IDE_DEVICE =5000 20480 -MEM_IDE_PARTITION=5002 20482 -MEM_IDE_POINTER=5006 20486 -MEM_IDE_STATUS =5001 20481 -MEM_INT_VEC_T =40FE 16638 -MEM_LOC_LOAD =4400 17408 -MEM_VAR_BLOCK =40FB 16635 -MEM_VAR_TIMEA =40FC 16636 -MEM_VAR_TIMER =40FE 16638 -MSG_CLEAR = 30A 778 -MSG_ERROR =1048 4168 -MSG_START =1061 4193 +MEM_FAT_AMOUNT 4319 17177 +MEM_FAT_COUNT1 431C 17180 +MEM_FAT_OF0_CCLUST 4335 17205 +MEM_FAT_OF0_DATREM 433F 17215 +MEM_FAT_OF0_DATSEC 433B 17211 +MEM_FAT_OF0_FATSEC 4337 17207 +MEM_FAT_RESERVED 4317 17175 +MEM_FAT_SECTORS 431A 17178 +MEM_FAT_TMPFNAME 4325 17189 +MEM_FAT_TMPPOINTER 431D 17181 +MEM_FAT_TMPPOINTER1 4321 17185 +MEM_IDE_BUFFER =4117 16663 +MEM_IDE_DEVICE =402C 16428 +MEM_IDE_DEV_TABLE=4036 16438 +MEM_IDE_FSBUFFER=4317 17175 +MEM_IDE_PARTITION=402E 16430 +MEM_IDE_POINTER=4032 16434 +MEM_IDE_SELECTED=4076 16502 +MEM_IDE_STATUS =402D 16429 +MEM_IDE_STRING_0=4077 16503 +MEM_IDE_STRING_1=409F 16543 +MEM_IDE_STRING_2=40C7 16583 +MEM_IDE_STRING_3=40EF 16623 +MSG_CLEAR = 14A 330 +NOT_IMPLEMENTED=1896 6294 +OP_CALL =18F8 6392 +OP_CLR =1A8C 6796 +OP_DASM =1979 6521 +OP_DUMP =1918 6424 +OP_EXEC =18DF 6367 +OP_IIC_IN =1A40 6720 +OP_IIC_OUT =19E0 6624 +OP_IO_IN =19A9 6569 +OP_IO_OUT =19BF 6591 +OP_LSDSK =1CA1 7329 +OP_RTIME =1A90 6800 +OP_SELDSK =1CA5 7333 +OP_SET =1948 6472 +OP_STIME =1C28 7208 +POST_CHECK_APU =1D12 7442 +POST_CHECK_IDE_30=1D3D 7485 +POST_CHECK_IDE_40=1D50 7504 +POST_CHECK_PIO =1CED 7405 +POST_START =1CDD 7389 +POST_TEST_RTC =1D6A 7530 PRG_RAM_START =4110 16656 PRG_RAM_TOP =FF00 65280 +PRINTINLINE 860C 34316 PROG_MEM_START =4000 16384 PROG_ROM_START = 100 256 -PROMPT_BEGIN =99 153 -PROMPT_BEGIN_READ_BACKSPACE=D6 214 -PROMPT_BEGIN_READ_LOOP=A5 165 -PROMPT_BEGIN_READ_PROCESS=FC 252 RST_00 =00 0 RST_08 =08 8 RST_10 =10 16 RST_18 =18 24 STACK_RAM_TOP =FFFF 65535 START_ROM =00 0 -STRCONV_BYTES_TO_HEX= 35B 859 -STRCONV_BYTES_TO_HEX_1= 36A 874 -STRCONV_BYTES_TO_HEX_2= 374 884 -STR_Banner_Start=1360 4960 -STR_HEXDUMP_HEADER=1390 5008 -STR_PD_HEADER =1319 4889 -STR_SyntaxError=1386 4998 -STR_Unknown =138B 5003 -SYM_ACK =06 6 -SYM_C =43 67 -SYM_CAN =18 24 -SYM_EOT =04 4 -SYM_ETB =17 23 -SYM_NAK =15 21 -SYM_SOH =01 1 +STRCONV_BYTES_TO_HEX= 19B 411 +STRCONV_BYTES_TO_HEX_1= 1AA 426 +STRCONV_BYTES_TO_HEX_2= 1B4 436 +STR_Banner_Start=1E6F 7791 +STR_PD_HEADER =1724 5924 SYS_BUF_START =4010 16400 SYS_RAM_START =4000 16384 VAR_CONSOLE_BAUD=18 24 VAR_CONSOLE_CONF=0F 15 VDP_MEM =80 128 VDP_REG =81 129 -_compare_filename_loop B2BC 45756 -_compare_filename_nomatch B2C9 45769 -_fat_get_root_table_loop B17E 45438 -_fat_lfs_loop B233 45619 -_fat_lfs_loop_compare_end B265 45669 -_fat_lfs_loop_compare_match B26D 45677 -_fat_lfs_loop_compare_next_sector B244 45636 -_fat_math_sector_add_16 B284 45700 -_fat_math_sector_add_16_2 B296 45718 -_fat_print_directory_loop B1AB 45483 -_fat_print_directory_loop_break B208 45576 -_fat_print_directory_loop_break_dirty B209 45577 -_fat_print_directory_loop_next B1D7 45527 -_fat_print_directory_loop_next_sector B1E2 45538 -_format_filename_fat16_clean B2D2 45778 -_format_filename_fat16_loop B2D9 45785 -_format_filename_fat16_loop_copy B2EC 45804 -_format_filename_fat16_loop_skip_8 B2E3 45795 -beep = ED7 3799 -beep_loop = EDA 3802 -beep_pause = EF7 3831 -compare_filename B2B8 45752 -dasm_00 = ADC 2780 -dasm_01 = DC8 3528 -dasm_02 = B62 2914 -dasm_03 = D9A 3482 -dasm_08 = BDF 3039 -dasm_09 = D6D 3437 -dasm_0A = B44 2884 -dasm_0B = DB1 3505 -dasm_10 = B24 2852 -dasm_12 = B6D 2925 -dasm_18 = AE7 2791 -dasm_1A = B4E 2894 -dasm_20 = B01 2817 -dasm_22 = E0E 3598 -dasm_27 = BA7 2983 -dasm_28 = AFA 2810 -dasm_2A = DDF 3551 -dasm_2F = BAB 2987 -dasm_30 = AF2 2802 -dasm_32 = B78 2936 -dasm_37 = BB7 2999 -dasm_38 = AEB 2795 -dasm_3A = B58 2904 -dasm_3F = BB3 2995 -dasm_76 = BBB 3003 -dasm_80C6 = C38 3128 -dasm_BE = BD5 3029 -dasm_C3 = AE0 2784 -dasm_C88E = C5E 3166 -dasm_C9 = B30 2864 -dasm_CD = B2A 2858 -dasm_D9 = BEC 3052 -dasm_DD = B12 2834 -dasm_DD_01 = DCF 3535 -dasm_DD_09 = D88 3464 -dasm_DD_22 = E24 3620 -dasm_DD_23 = D9F 3487 -dasm_DD_2A = DF6 3574 -dasm_DD_2B = DB6 3510 -dasm_DD_34 = D38 3384 -dasm_DD_35 = D55 3413 -dasm_DD_86 = C40 3136 -dasm_DD_8E = C66 3174 -dasm_DD_96 = C89 3209 -dasm_DD_9E = CA9 3241 -dasm_DD_A6 = CCA 3274 -dasm_DD_AE = D01 3329 -dasm_DD_B6 = CE6 3302 -dasm_DD_BE = D1D 3357 -dasm_DD_E1 = E76 3702 -dasm_DD_E3 = BFC 3068 -dasm_DD_E5 = E60 3680 -dasm_DD_F9 = E46 3654 -dasm_E1 = E70 3696 -dasm_E3 = BF0 3056 -dasm_E5 = E5A 3674 -dasm_E9 = B09 2825 -dasm_ED_42 = D7F 3455 -dasm_ED_43 = E1A 3610 -dasm_ED_44 = BAF 2991 -dasm_ED_45 = B3A 2874 -dasm_ED_46 = BC6 3014 -dasm_ED_4A = D76 3446 -dasm_ED_4B = DEB 3563 -dasm_ED_4D = B35 2869 -dasm_ED_56 = BCB 3019 -dasm_ED_5E = BD0 3024 -dasm_ED_A0 = C14 3092 -dasm_ED_A1 = C26 3110 -dasm_ED_A8 = C1D 3101 -dasm_ED_A9 = C2F 3119 -dasm_ED_B0 = C18 3096 -dasm_ED_B1 = C2A 3114 -dasm_ED_B8 = C21 3105 -dasm_ED_B9 = C33 3123 -dasm_F3 = BC0 3008 -dasm_F9 = E3C 3644 -dasm_FB = BC3 3011 -dasm_FD = B1B 2843 -dasm_FD_01 = DD7 3543 -dasm_FD_09 = D91 3473 -dasm_FD_22 = E30 3632 -dasm_FD_23 = DA8 3496 -dasm_FD_2A = E02 3586 -dasm_FD_2B = DBF 3519 -dasm_FD_34 = D44 3396 -dasm_FD_35 = D61 3425 -dasm_FD_86 = C4F 3151 -dasm_FD_8E = C75 3189 -dasm_FD_96 = C95 3221 -dasm_FD_9E = CB7 3255 -dasm_FD_A6 = CD6 3286 -dasm_FD_AE = D0D 3341 -dasm_FD_B6 = CF1 3313 -dasm_FD_BE = D28 3368 -dasm_FD_E1 = E7E 3710 -dasm_FD_E3 = C08 3080 -dasm_FD_E5 = E68 3688 -dasm_FD_F9 = E50 3664 -dasm_FF = B3F 2879 -dasm_UU = E86 3718 -dasm_UW = E8A 3722 -dasm__AND = CC5 3269 -dasm__CP = D19 3353 -dasm__DEC = D50 3408 -dasm__ED_47 = B97 2967 -dasm__ED_4F = B9F 2975 -dasm__ED_57 = B87 2951 -dasm__ED_5F = B8F 2959 -dasm__INC = D33 3379 -dasm__LD = B83 2947 -dasm__OR = CE2 3298 -dasm__SBC = CA1 3233 -dasm__SUB = C84 3204 -dasm__XOR = CFC 3324 -dasm_opcode_table= 684 1668 -dasm_print16hex_addr= 4B1 1201 -dasm_print8hex = 4C9 1225 -dasm_printFlags_table= E8F 3727 -dasm_printRegister8_table= E9F 3743 -dasm_printRegister8_table_HL= EBF 3775 -dasm_printRegisterIX_table= EA7 3751 -dasm_printRegisterIY_table= EAF 3759 -dasm_printRegisterSP_table= EB7 3767 -delay_small B033 45107 -disassemble = 375 885 -disassemble_continue= 45B 1115 -disassemble_err= 44B 1099 -disassemble_next= 379 889 -disassemble_print_opcode_params_end= 448 1096 -disassemble_print_opcode_params_loop= 3F4 1012 -disassemble_print_opcode_raw= 3B6 950 -disassemble_print_opcode_raw_fill= 3CA 970 -disassemble_table_first_match= 48D 1165 -disassemble_table_found= 4A7 1191 -disassemble_table_notfound= 4AB 1195 -disassemble_table_seek= 469 1129 -disassemble_table_seek_loop= 46D 1133 -dump_pretty =12BE 4798 -dump_pretty_ascii=12E8 4840 -dump_pretty_ascii_cont=1306 4870 -dump_pretty_ascii_loop=12F0 4848 -dump_pretty_ascii_none=1301 4865 -dump_pretty_col=12DB 4827 -dump_pretty_end=1318 4888 -dump_pretty_nextrow=130C 4876 -dump_pretty_row=12C6 4806 -fat_copy_lba_pointer B2AF 45743 -fat_get_root_table B142 45378 -fat_lfs B21A 45594 -fat_print_directory B18C 45452 -fat_reset_pointer B2A7 45735 -find_partition B038 45112 -find_partition_loop B070 45168 -find_partition_next B07A 45178 -find_partition_process B08C 45196 -format_filename_fat16 B2CE 45774 -ide_printerror =116E 4462 -ide_readsector_256=10ED 4333 -ide_readsector_256_done=111C 4380 -ide_readsector_256_waitloop=10EF 4335 -ide_readsector_512_inv=111D 4381 -ide_readsector_512_inv_waitloop=1122 4386 -ide_readsector_timeout=1158 4440 -ide_regread_8 =10CF 4303 -ide_regwrite_8 =10B3 4275 -ide_reset =10A6 4262 -ide_writesector_256=116D 4461 -ideif_init_drive=11F4 4596 -ideif_init_drive_detected=1222 4642 -ideif_init_drive_loop1=1208 4616 -ideif_init_drive_nodrv=121B 4635 -mon_start_complete=7B 123 -mon_start_init_ctc=50 80 -mon_start_init_serial=64 100 -mon_start_init_sound=50 80 -mon_start_ram =67 103 -mon_start_ram_loop=70 112 +_COMMAND_PROCESS_FOUND=1895 6293 +_OP_CALL =1917 6423 +_OP_IIC_ACK_ERR=1A25 6693 +_OP_IIC_ACK_ERR_str=1A2C 6700 +_OP_IIC_IN_LOOP=1A72 6770 +_OP_IIC_IN_LOOP_TEXT=1A7F 6783 +_OP_IIC_OUT_LOOP=19F6 6646 +_OP_IIC_OUT_SEND=1A12 6674 +_OP_RTIME_NN =1A93 6803 +_OP_RTIME_RD_CMD=1B4B 6987 +_OP_SELDSK_INVALID=1CB4 7348 +_OP_SELDSK_INVALID_STR=1CC4 7364 +_OP_SET_LOOP =1960 6496 +_OP_STIME_INVALID=1BEE 7150 +_OP_STIME_PROMPT=1C05 7173 +_OP_STIME_PROMPT_ERR=1C1D 7197 +_OP_STIME_STR_DAY=1B4C 6988 +_OP_STIME_STR_HOUR=1B9D 7069 +_OP_STIME_STR_MIN=1BB8 7096 +_OP_STIME_STR_MON=1B67 7015 +_OP_STIME_STR_SEC=1BD3 7123 +_OP_STIME_STR_YEAR=1B82 7042 +_POST_CHECK_APU_FAILED=1D31 7473 +_POST_CHECK_IDE_FAILED=1D63 7523 +_POST_CHECK_PIO_FAILED=1D06 7430 +_POST_TEST_RTC_INVALID=1DA4 7588 +_POST_TEST_RTC_NOTFOUND=1D9D 7581 +_STR_NOT_FOUND =18B8 6328 +_STR_NOT_IMPLEMENTED=18A4 6308 +_STR_SYNTAX =18CC 6348 +_beep_pause_l1 = D30 3376 +_compare_filename_loop 8561 34145 +_compare_filename_nomatch 856E 34158 +_fat_get_root_table_invalid 835D 33629 +_fat_get_root_table_loop 834F 33615 +_fat_lfs_loop 84AF 33967 +_fat_lfs_loop_compare_end 84E1 34017 +_fat_lfs_loop_compare_match 84E9 34025 +_fat_lfs_loop_compare_next_sector 84C0 33984 +_fat_math_add32 8514 34068 +_fat_math_sector_add_16 8500 34048 +_fat_print_directory_dir 8431 33841 +_fat_print_directory_loop 83BD 33725 +_fat_print_directory_loop_break 8494 33940 +_fat_print_directory_loop_break_dirty 8495 33941 +_fat_print_directory_loop_file 83D9 33753 +_fat_print_directory_loop_next 8463 33891 +_fat_print_directory_loop_next_sector 846E 33902 +_format_filename_fat16_clean 8577 34167 +_format_filename_fat16_loop 857E 34174 +_format_filename_fat16_loop_copy 8591 34193 +_format_filename_fat16_loop_skip_8 8588 34184 +_ideif_drv_sel_fail 8288 33416 +_ideif_drv_sel_fstr0 82AD 33453 +_ideif_drv_sel_pstr 82A4 33444 +_ideif_drv_sel_sstr0 82BB 33467 +_ideif_drv_sel_syn 82C8 33480 +_ideif_init_drive_found=13E9 5097 +_ideif_init_drive_loop=13D1 5073 +_ideif_init_drive_nodrv=13E4 5092 +_ideif_init_drive_prt_fnd=1454 5204 +_ideif_init_drive_prt_l1=1442 5186 +_ideif_init_drive_prt_ln=144C 5196 +_ideif_prnt_devtable_hdr=1510 5392 +_ideif_prnt_devtable_l1=12E1 4833 +_ideif_prnt_devtable_l1_e2=13A7 5031 +_ideif_prnt_devtable_l1_es=1326 4902 +_ideif_prnt_devtable_l1_ms=13A4 5028 +_ideif_prnt_devtable_l1_nxt=12EE 4846 +_ideif_prnt_devtable_l1_s00=1314 4884 +_ideif_prnt_devtable_l1_s01=1319 4889 +_ideif_prnt_devtable_l1_s02=131E 4894 +_ideif_prnt_devtable_l1_sFF=1323 4899 +_ideif_prnt_devtable_l1_sel=12EC 4844 +_ideif_prnt_devtable_master=1574 5492 +_ideif_prnt_devtable_s00=1548 5448 +_ideif_prnt_devtable_s01=1553 5459 +_ideif_prnt_devtable_s02=155E 5470 +_ideif_prnt_devtable_sFF=1569 5481 +_ideif_prnt_devtable_slave=157C 5500 +_read_bcd_invalid= 147 327 +_shift4 =1C9C 7324 +beep = D17 3351 +beep_loop = D19 3353 +beep_pause = D2F 3375 +compare_filename 855D 34141 +dasm_00 = 91C 2332 +dasm_01 = C08 3080 +dasm_02 = 9A2 2466 +dasm_03 = BDA 3034 +dasm_08 = A1F 2591 +dasm_09 = BAD 2989 +dasm_0A = 984 2436 +dasm_0B = BF1 3057 +dasm_10 = 964 2404 +dasm_12 = 9AD 2477 +dasm_18 = 927 2343 +dasm_1A = 98E 2446 +dasm_20 = 941 2369 +dasm_22 = C4E 3150 +dasm_27 = 9E7 2535 +dasm_28 = 93A 2362 +dasm_2A = C1F 3103 +dasm_2F = 9EB 2539 +dasm_30 = 932 2354 +dasm_32 = 9B8 2488 +dasm_37 = 9F7 2551 +dasm_38 = 92B 2347 +dasm_3A = 998 2456 +dasm_3F = 9F3 2547 +dasm_76 = 9FB 2555 +dasm_80C6 = A78 2680 +dasm_BE = A15 2581 +dasm_C3 = 920 2336 +dasm_C88E = A9E 2718 +dasm_C9 = 970 2416 +dasm_CD = 96A 2410 +dasm_D9 = A2C 2604 +dasm_DD = 952 2386 +dasm_DD_01 = C0F 3087 +dasm_DD_09 = BC8 3016 +dasm_DD_22 = C64 3172 +dasm_DD_23 = BDF 3039 +dasm_DD_2A = C36 3126 +dasm_DD_2B = BF6 3062 +dasm_DD_34 = B78 2936 +dasm_DD_35 = B95 2965 +dasm_DD_86 = A80 2688 +dasm_DD_8E = AA6 2726 +dasm_DD_96 = AC9 2761 +dasm_DD_9E = AE9 2793 +dasm_DD_A6 = B0A 2826 +dasm_DD_AE = B41 2881 +dasm_DD_B6 = B26 2854 +dasm_DD_BE = B5D 2909 +dasm_DD_E1 = CB6 3254 +dasm_DD_E3 = A3C 2620 +dasm_DD_E5 = CA0 3232 +dasm_DD_F9 = C86 3206 +dasm_E1 = CB0 3248 +dasm_E3 = A30 2608 +dasm_E5 = C9A 3226 +dasm_E9 = 949 2377 +dasm_ED_42 = BBF 3007 +dasm_ED_43 = C5A 3162 +dasm_ED_44 = 9EF 2543 +dasm_ED_45 = 97A 2426 +dasm_ED_46 = A06 2566 +dasm_ED_4A = BB6 2998 +dasm_ED_4B = C2B 3115 +dasm_ED_4D = 975 2421 +dasm_ED_56 = A0B 2571 +dasm_ED_5E = A10 2576 +dasm_ED_A0 = A54 2644 +dasm_ED_A1 = A66 2662 +dasm_ED_A8 = A5D 2653 +dasm_ED_A9 = A6F 2671 +dasm_ED_B0 = A58 2648 +dasm_ED_B1 = A6A 2666 +dasm_ED_B8 = A61 2657 +dasm_ED_B9 = A73 2675 +dasm_F3 = A00 2560 +dasm_F9 = C7C 3196 +dasm_FB = A03 2563 +dasm_FD = 95B 2395 +dasm_FD_01 = C17 3095 +dasm_FD_09 = BD1 3025 +dasm_FD_22 = C70 3184 +dasm_FD_23 = BE8 3048 +dasm_FD_2A = C42 3138 +dasm_FD_2B = BFF 3071 +dasm_FD_34 = B84 2948 +dasm_FD_35 = BA1 2977 +dasm_FD_86 = A8F 2703 +dasm_FD_8E = AB5 2741 +dasm_FD_96 = AD5 2773 +dasm_FD_9E = AF7 2807 +dasm_FD_A6 = B16 2838 +dasm_FD_AE = B4D 2893 +dasm_FD_B6 = B31 2865 +dasm_FD_BE = B68 2920 +dasm_FD_E1 = CBE 3262 +dasm_FD_E3 = A48 2632 +dasm_FD_E5 = CA8 3240 +dasm_FD_F9 = C90 3216 +dasm_FF = 97F 2431 +dasm_UU = CC6 3270 +dasm_UW = CCA 3274 +dasm__AND = B05 2821 +dasm__CP = B59 2905 +dasm__DEC = B90 2960 +dasm__ED_47 = 9D7 2519 +dasm__ED_4F = 9DF 2527 +dasm__ED_57 = 9C7 2503 +dasm__ED_5F = 9CF 2511 +dasm__INC = B73 2931 +dasm__LD = 9C3 2499 +dasm__OR = B22 2850 +dasm__SBC = AE1 2785 +dasm__SUB = AC4 2756 +dasm__XOR = B3C 2876 +dasm_opcode_table= 4C4 1220 +dasm_print16hex_addr= 2F1 753 +dasm_print8hex = 309 777 +dasm_printFlags_table= CCF 3279 +dasm_printRegister8_table= CDF 3295 +dasm_printRegister8_table_HL= CFF 3327 +dasm_printRegisterIX_table= CE7 3303 +dasm_printRegisterIY_table= CEF 3311 +dasm_printRegisterSP_table= CF7 3319 +disassemble = 1B5 437 +disassemble_continue= 29B 667 +disassemble_err= 28B 651 +disassemble_next= 1B9 441 +disassemble_print_opcode_params_end= 288 648 +disassemble_print_opcode_params_loop= 234 564 +disassemble_print_opcode_raw= 1F6 502 +disassemble_print_opcode_raw_fill= 20A 522 +disassemble_table_first_match= 2CD 717 +disassemble_table_found= 2E7 743 +disassemble_table_notfound= 2EB 747 +disassemble_table_seek= 2A9 681 +disassemble_table_seek_loop= 2AD 685 +dump_pretty =16C9 5833 +dump_pretty_ascii=16F3 5875 +dump_pretty_ascii_cont=1711 5905 +dump_pretty_ascii_loop=16FB 5883 +dump_pretty_ascii_none=170C 5900 +dump_pretty_col=16E6 5862 +dump_pretty_end=1723 5923 +dump_pretty_nextrow=1717 5911 +dump_pretty_row=16D1 5841 +endPrint 861A 34330 +fat_copy_lba_pointer 8554 34132 +fat_get_root_table 830B 33547 +fat_getfatsec 85BB 34235 +fat_lfs 8496 33942 +fat_print_dbg 803A 32826 +fat_print_directory 8385 33669 +fat_reset_pointer 8545 34117 +format_filename_fat16 8573 34163 +ide_printerror = E04 3588 +ide_readsector_256= D83 3459 +ide_readsector_256_done= DB2 3506 +ide_readsector_256_waitloop= D85 3461 +ide_readsector_512_inv= DB3 3507 +ide_readsector_512_inv_waitloop= DB8 3512 +ide_readsector_timeout= DEE 3566 +ide_regread_8 = D65 3429 +ide_regwrite_8 = D49 3401 +ide_reset = D3C 3388 +ide_writesector_256= E03 3587 +ideif_drv_sel 825A 33370 +ideif_get_drv_pointer=1497 5271 +ideif_init_all =14AB 5291 +ideif_init_devtable=12B5 4789 +ideif_init_drive=13C8 5064 +ideif_prnt_devtable=12D3 4819 +iic_init =15DD 5597 +iic_read_ack =161C 5660 +iic_receive_buffer=15AE 5550 +iic_receive_buffer_done=15D1 5585 +iic_receive_buffer_err=15D7 5591 +iic_receive_buffer_loop=15BF 5567 +iic_receive_byte=16A2 5794 +iic_receive_byte_loop=16AF 5807 +iic_send_ack =1642 5698 +iic_send_buffer=1584 5508 +iic_send_buffer_done=15A2 5538 +iic_send_buffer_err=15A8 5544 +iic_send_buffer_loop=1594 5524 +iic_send_byte =167C 5756 +iic_send_byte_loop=1688 5768 +iic_send_ebit =15FB 5627 +iic_send_nack =165F 5727 +iic_send_sbit =15E6 5606 mon_var_template=44 68 -mon_var_template_end=6E 110 -param_01 = 4D7 1239 -param_02 = 4FE 1278 -param_03 = 51B 1307 -param_03_done = 553 1363 -param_03_neg = 53C 1340 -param_04 = 557 1367 -param_04_i = 567 1383 -param_05 = 56D 1389 -param_06 = 57A 1402 -param_07 = 594 1428 -param_08 = 5A1 1441 -param_09 = 5B6 1462 -param_09_0A = 5BC 1468 -param_0A = 5AD 1453 -param_10 = 5CB 1483 -param_11 = 5DB 1499 -param_11_12 = 5EA 1514 -param_11_12_all= 60A 1546 -param_11_12_def= 5FD 1533 -param_11_12_ix = 602 1538 -param_11_12_iy = 607 1543 -param_12 = 5E3 1507 -param_13 = 61B 1563 -param_80 = 63A 1594 -param_80_seek = 641 1601 -param_81 = 631 1585 -param_comma = 675 1653 -param_printRegister= 650 1616 -param_printRegisterA= 66E 1646 -param_printRegisterHL= 666 1638 -print_a_hex = 2E7 743 -print_char = 2B7 695 -print_clear = 2CA 714 -print_newLine = 2D1 721 -print_str = 2BF 703 -print_str_end = 2C9 713 -print_str_fixed=1358 4952 -print_wait_out = 2DC 732 -read_char = 2F8 760 -read_lba_sector=1256 4694 -str1 B00F 45071 -str2 B01C 45084 -str3 B029 45097 -str4 B02E 45102 -str_dev_notfound=12B3 4787 -str_dev_ready =129D 4765 -str_dev_ready2 =12AA 4778 -str_dev_waitready=1289 4745 -str_error_start=11A1 4513 -str_error_start1=11BE 4542 -str_error_start2=11C7 4551 -str_error_time =11D0 4560 -str_file_found B305 45829 -str_file_notfound B2F3 45811 -str_files B139 45369 -str_part_seek_1 B104 45316 -str_part_seek_2 B10F 45327 -str_part_seek_3 B118 45336 -str_part_seek_4 B121 45345 -str_sum B12A 45354 -var_buffer =4029 16425 +mon_var_template_end= 370 880 +nxtILC 860F 34319 +param_01 = 317 791 +param_02 = 33E 830 +param_03 = 35B 859 +param_03_done = 393 915 +param_03_neg = 37C 892 +param_04 = 397 919 +param_04_i = 3A7 935 +param_05 = 3AD 941 +param_06 = 3BA 954 +param_07 = 3D4 980 +param_08 = 3E1 993 +param_09 = 3F6 1014 +param_09_0A = 3FC 1020 +param_0A = 3ED 1005 +param_10 = 40B 1035 +param_11 = 41B 1051 +param_11_12 = 42A 1066 +param_11_12_all= 44A 1098 +param_11_12_def= 43D 1085 +param_11_12_ix = 442 1090 +param_11_12_iy = 447 1095 +param_12 = 423 1059 +param_13 = 45B 1115 +param_80 = 47A 1146 +param_80_seek = 481 1153 +param_81 = 471 1137 +param_comma = 4B5 1205 +param_printRegister= 490 1168 +param_printRegisterA= 4AE 1198 +param_printRegisterHL= 4A6 1190 +print_16_hex 824D 33357 +print_32_hex 8234 33332 +print_a_hex = 107 263 +print_bcd = 119 281 +print_char =D7 215 +print_clear =EA 234 +print_newLine =F1 241 +print_str =DF 223 +print_str_end =E9 233 +print_str_fixed=1763 5987 +print_wait_out =FC 252 +read_bcd = 131 305 +read_char = 11F 287 +read_lba_sector=14BE 5310 +sel_dsk 8000 32768 +str_dev_done =1508 5384 +str_dev_waitready=14F0 5360 +str_error_start= E37 3639 +str_error_start1= E54 3668 +str_error_start2= E5D 3677 +str_error_time = E66 3686 +str_file_found 85AA 34218 +str_file_notfound 8598 34200 +str_post_apu =1DFC 7676 +str_post_ide_30=1DAB 7595 +str_post_ide_40=1DC6 7622 +str_post_nd =1E32 7730 +str_post_ok =1E6A 7786 +str_post_pio =1DE1 7649 +str_post_rtc =1E17 7703 +str_post_rtc_iv=1E40 7744 +var_apu_present=400A 16394 +var_buffer =402B 16427 var_buffer_len =4000 16384 var_bytes_count=411A 16666 var_curserchar =4006 16390 @@ -1309,6 +1836,7 @@ var_curseron =4005 16389 var_curserstate=4004 16388 var_curserx =4002 16386 var_cursery =4003 16387 +var_idebuffer =402C 16428 var_last_char =4001 16385 var_opcode =4114 16660 var_opcode_length=4116 16662 @@ -1317,26 +1845,6 @@ var_opcode_start=4110 16656 var_opcode_string=4117 16663 var_opcode_table=4112 16658 var_opcode_x =4115 16661 -var_ps2mem =4019 16409 -var_scratch =4009 16393 -xmodem_ack =107B 4219 -xmodem_await_conn= F34 3892 -xmodem_end = FDF 4063 -xmodem_err = FA5 4005 -xmodem_init = F06 3846 -xmodem_int = FE6 4070 -xmodem_int_cont=1005 4101 -xmodem_nak =1089 4233 -xmodem_out =1037 4151 -xmodem_packet = F3F 3903 -xmodem_packet_EOT= F9D 3997 -xmodem_packet_get= F51 3921 -xmodem_packet_get_crc= F8A 3978 -xmodem_packet_get_data= F7B 3963 -xmodem_read_timeount=03 3 -xmodem_read_wait=100A 4106 -xmodem_read_wait_loop=1018 4120 -xmodem_read_wait_timeout=1035 4149 -xmodem_wait =1097 4247 -xmodem_wait_1 =109D 4253 -xmodem_wait_out=103D 4157 +var_pio_present=4009 16393 +var_ps2mem =401B 16411 +var_scratch =400B 16395 diff --git a/OperatingSystem/software/zout/test.mon b/OperatingSystem/software/zout/test.mon index e0d3f48..fa59ec6 100644 --- a/OperatingSystem/software/zout/test.mon +++ b/OperatingSystem/software/zout/test.mon @@ -1,50 +1,98 @@ -!B000 CD 38 B0 CD 42 B1 11 0F B0 CD 1A B2 C3 99 00 49 -!B010 4C 4C 55 53 49 4F 4E 2E 50 53 47 00 48 41 4C 4C -!B020 4F 57 4C 54 2E 54 58 54 00 54 45 53 54 00 2E 4F -!B030 52 47 00 F5 F1 F5 F1 C9 3E 01 06 0A CD B3 10 3E -!B040 01 06 0B CD B3 10 3E 00 06 0C CD B3 10 3E 00 06 -!B050 0D CD B3 10 3E A0 06 0E CD B3 10 3E 20 06 0F CD -!B060 B3 10 21 41 50 CD 1D 11 06 04 0E 00 DD 21 FF 51 -!B070 DD 7E 04 B7 C2 8C B0 C3 7A B0 3E 0A CD B7 02 3E -!B080 0D CD B7 02 11 10 00 DD 19 10 E5 C9 21 04 B1 CD -!B090 BF 02 DD 7E 04 CD E7 02 DD 7E 04 FE 0E 20 DB 21 -!B0A0 0F B1 CD BF 02 21 18 B1 CD BF 02 DD 7E 08 32 05 -!B0B0 50 DD 7E 09 32 04 50 DD 7E 0A 32 03 50 DD 7E 0B -!B0C0 32 02 50 3A 05 50 CD E7 02 3A 04 50 CD E7 02 3A -!B0D0 03 50 CD E7 02 3A 02 50 CD E7 02 21 21 B1 CD BF -!B0E0 02 DD 7E 0C CD E7 02 DD 7E 0D CD E7 02 DD 7E 0E -!B0F0 CD E7 02 DD 7E 0F CD E7 02 3E 0A CD B7 02 3E 0D -!B100 CD B7 02 C9 2D 20 54 79 70 65 3A 20 30 78 00 20 -!B110 53 74 61 74 65 3A 20 00 20 4C 42 41 3A 20 30 78 -!B120 00 20 4C 65 6E 3A 20 30 78 00 2D 2D 2D 2D 2D 2D -!B130 2D 2D 2D 2D 2D 2D 0A 0D 00 20 46 69 6C 65 73 0A -!B140 0D 00 CD A7 B2 21 02 50 3E 01 CD 56 12 DD 21 41 -!B150 50 DD 7E 0E 32 0A 50 DD 7E 0F 32 0B 50 DD 7E 10 -!B160 32 0C 50 DD 7E 16 32 0D 50 DD 7E 17 32 0E 50 3A -!B170 0E 50 57 3A 0D 50 5F AF 67 6F 3A 0C 50 47 19 10 -!B180 FD 16 00 3A 0A 50 5F 19 CD 84 B2 C9 3E 0A CD B7 -!B190 02 3E 0D CD B7 02 ED 5B 0D 50 ED 53 0F 50 21 06 -!B1A0 50 06 01 CD 56 12 21 41 50 0E 10 7E E5 FE 41 28 -!B1B0 26 FE E5 28 22 FE 00 CA 08 B2 06 08 CD 58 13 3E -!B1C0 2E CD B7 02 06 03 CD 58 13 7E CD B7 02 3E 0A CD -!B1D0 B7 02 3E 0D CD B7 02 0D 28 08 E1 11 20 00 19 C3 -!B1E0 AB B1 E1 26 00 2E 01 CD 84 B2 ED 5B 0F 50 1B ED -!B1F0 53 0F 50 7A B3 CA 09 B2 21 06 50 06 01 CD 56 12 -!B200 21 41 50 0E 10 C3 AB B1 E1 21 2A B1 CD BF 02 79 -!B210 CD E7 02 21 39 B1 CD BF 02 C9 D5 21 11 50 CD CE -!B220 B2 3E 10 32 0F 50 21 06 50 06 01 CD 56 12 21 41 -!B230 50 0E 10 D1 D5 CD B8 B2 38 33 0D 28 07 11 20 00 -!B240 19 C3 33 B2 26 00 2E 01 CD 84 B2 3A 0F 50 3D 32 -!B250 0F 50 CA 65 B2 21 06 50 06 01 CD 56 12 21 41 50 -!B260 0E 10 C3 33 B2 D1 21 F3 B2 CD BF 02 C9 D1 06 08 -!B270 CD 58 13 3E 2E CD B7 02 06 03 CD 58 13 21 05 B3 -!B280 CD BF 02 C9 DD 21 06 50 7D DD 86 03 DD 77 03 30 -!B290 05 3E 01 DD 86 02 7C DD 86 02 DD 77 02 D0 3E 01 -!B2A0 DD 86 01 DD 77 01 C9 21 02 50 11 06 50 18 00 C5 -!B2B0 06 00 0E 04 ED B0 C1 C9 E5 C5 06 0B 1A 4F 7E A9 -!B2C0 20 07 05 20 F7 C1 E1 37 C9 C1 E1 37 3F C9 06 0B -!B2D0 E5 AF 77 23 10 FC E1 06 0D 1A B7 C8 05 C8 FE 2E -!B2E0 20 0A 13 78 FE 05 38 F1 23 05 18 F7 1A 77 23 13 -!B2F0 C3 D9 B2 46 69 6C 65 20 6E 6F 74 20 66 6F 75 6E -!B300 64 21 0D 0A 00 20 46 69 6C 65 20 6C 6F 63 61 74 -!B310 65 64 21 0D 0A 00 +!8000 CD 5A 82 CD 3A 80 C9 +!8010 CD 3A 80 C9 +!8020 CD 85 83 C9 +!8030 21 06 00 22 35 43 CD BB 85 C9 CD 0C 86 0A 0D 50 +!8040 54 52 2E 4D 45 4D 5F 49 44 45 5F 50 4F 49 4E 54 +!8050 45 52 3A 20 20 20 20 30 78 00 DD 21 32 40 CD 34 +!8060 82 CD 0C 86 20 20 7C 20 20 50 54 52 2E 4D 45 4D +!8070 5F 49 44 45 5F 50 41 52 54 49 54 49 4F 4E 3A 20 +!8080 20 20 30 78 00 DD 21 2E 40 CD 34 82 CD 0C 86 0A +!8090 0D 50 54 52 2E 4D 45 4D 5F 46 41 54 5F 54 4D 50 +!80A0 50 4F 49 4E 54 45 52 3A 20 30 78 00 DD 21 1D 43 +!80B0 CD 34 82 CD 0C 86 20 20 7C 20 20 50 54 52 2E 4D +!80C0 45 4D 5F 46 41 54 5F 54 4D 50 50 4F 49 4E 54 45 +!80D0 52 31 3A 20 30 78 00 DD 21 21 43 CD 34 82 CD 0C +!80E0 86 0A 0D 56 41 4C 2E 4D 45 4D 5F 46 41 54 5F 52 +!80F0 45 53 45 52 56 45 44 3A 20 20 20 30 78 00 DD 21 +!8100 17 43 CD 4D 82 CD 0C 86 20 20 20 20 20 20 7C 20 +!8110 20 56 41 4C 2E 4D 45 4D 5F 46 41 54 5F 41 4D 4F +!8120 55 4E 54 3A 20 20 20 20 20 20 30 78 00 3A 19 43 +!8130 CD 07 01 CD 0C 86 0A 0D 56 41 4C 2E 4D 45 4D 5F +!8140 46 41 54 5F 53 45 43 54 4F 52 53 3A 20 20 20 20 +!8150 30 78 00 DD 21 1A 43 CD 4D 82 CD 0C 86 20 20 20 +!8160 20 20 20 7C 20 20 56 41 4C 2E 4D 45 4D 5F 46 41 +!8170 54 5F 43 4F 55 4E 54 31 3A 20 20 20 20 20 20 30 +!8180 78 00 3A 1C 43 CD 07 01 CD 0C 86 0A 0D 56 41 4C +!8190 2E 4D 45 4D 5F 46 41 54 5F 4F 46 30 5F 43 43 4C +!81A0 55 53 54 3A 20 30 78 00 DD 21 35 43 CD 4D 82 CD +!81B0 0C 86 20 20 20 20 20 20 7C 20 20 50 54 52 2E 4D +!81C0 45 4D 5F 46 41 54 5F 4F 46 30 5F 46 41 54 53 45 +!81D0 43 3A 20 20 30 78 00 DD 21 37 43 CD 34 82 CD 0C +!81E0 86 0A 0D 56 41 4C 2E 4D 45 4D 5F 46 41 54 5F 4F +!81F0 46 30 5F 44 41 54 53 45 43 3A 20 30 78 00 DD 21 +!8200 3B 43 CD 34 82 CD 0C 86 20 20 7C 20 20 50 54 52 +!8210 2E 4D 45 4D 5F 46 41 54 5F 4F 46 30 5F 44 41 54 +!8220 52 45 4D 3A 20 20 30 78 00 DD 21 3F 43 CD 4D 82 +!8230 CD F1 00 C9 DD 7E 03 CD 07 01 DD 7E 02 CD 07 01 +!8240 DD 7E 01 CD 07 01 DD 7E 00 CD 07 01 C9 DD 7E 01 +!8250 CD 07 01 DD 7E 00 CD 07 01 C9 32 76 40 F5 CD 97 +!8260 14 DD 7E 00 B7 C2 88 82 CD 0B 83 2A 32 40 ED 5B +!8270 2E 40 CD 54 85 21 A4 82 CD DF 00 F1 C6 45 CD D7 +!8280 00 21 BB 82 CD DF 00 C9 21 A4 82 CD DF 00 F1 C6 +!8290 45 CD D7 00 21 AD 82 CD DF 00 11 20 00 01 70 00 +!82A0 CD 17 0D C9 0A 0D 44 72 69 76 65 20 00 3A 20 6E +!82B0 6F 74 20 72 65 61 64 79 0A 0D 00 3A 20 73 65 6C +!82C0 65 63 74 65 64 0A 0D 00 0A 0D 49 6E 76 61 6C 69 +!82D0 64 20 64 72 69 76 65 20 6C 65 74 74 65 72 0A 0D +!82E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +!82F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +!8300 00 00 00 00 00 00 00 00 00 00 00 CD 45 85 21 32 +!8310 40 3E 01 CD BE 14 3A 17 41 FE EB C2 5D 83 DD 21 +!8320 17 41 DD 7E 0E 32 17 43 DD 7E 0F 32 18 43 DD 7E +!8330 10 32 19 43 DD 7E 16 32 1A 43 DD 7E 17 32 1B 43 +!8340 3A 1B 43 57 3A 1A 43 5F AF 67 6F 3A 19 43 47 19 +!8350 10 FD 16 00 3A 17 43 5F 19 CD 00 85 C9 CD 0C 86 +!8360 0A 0D 43 61 6E 6E 6F 74 20 66 69 6E 64 20 62 6F +!8370 6F 74 20 73 65 63 74 6F 72 2E 0A 0D 00 CD 97 14 +!8380 DD 36 00 02 C9 ED 5B 1A 43 ED 53 1C 43 21 32 40 +!8390 06 01 CD BE 14 CD 0C 86 0A 0D 20 20 46 69 6C 65 +!83A0 6E 61 6D 65 20 20 20 20 20 43 6C 75 73 74 65 72 +!83B0 20 53 69 7A 65 0A 0D 00 21 17 41 0E 10 7E E5 DD +!83C0 E1 E5 FE 41 CA 63 84 FE E5 CA 63 84 FE 00 CA 94 +!83D0 84 DD 7E 0B FE 10 CA 31 84 3E 20 CD D7 00 3E 20 +!83E0 CD D7 00 06 08 CD 63 17 3E 2E CD D7 00 06 03 CD +!83F0 63 17 CD 0C 86 20 30 78 00 DD 7E 1B CD 07 01 DD +!8400 7E 1A CD 07 01 CD 0C 86 20 20 30 78 00 DD 7E 1F +!8410 CD 07 01 DD 7E 1E CD 07 01 DD 7E 1D CD 07 01 DD +!8420 7E 1C CD 07 01 3E 0A CD D7 00 3E 0D CD D7 00 18 +!8430 32 3E 44 CD D7 00 3E 20 CD D7 00 06 08 CD 63 17 +!8440 CD 0C 86 20 20 20 20 20 30 78 00 DD 7E 1B CD 07 +!8450 01 DD 7E 1A CD 07 01 3E 0A CD D7 00 3E 0D CD D7 +!8460 00 18 00 0D 28 08 E1 11 20 00 19 C3 BD 83 E1 26 +!8470 00 2E 01 CD 00 85 ED 5B 1C 43 1B ED 53 1C 43 7A +!8480 B3 CA 95 84 21 32 40 06 01 CD BE 14 21 17 41 0E +!8490 10 C3 BD 83 E1 C9 D5 21 25 43 CD 73 85 3E 10 32 +!84A0 1C 43 21 32 40 06 01 CD BE 14 21 17 41 0E 10 D1 +!84B0 D5 CD 5D 85 38 33 0D 28 07 11 20 00 19 C3 AF 84 +!84C0 26 00 2E 01 CD 00 85 3A 1C 43 3D 32 1C 43 CA E1 +!84D0 84 21 32 40 06 01 CD BE 14 21 17 41 0E 10 C3 AF +!84E0 84 D1 21 98 85 CD DF 00 C9 D1 06 08 CD 63 17 3E +!84F0 2E CD D7 00 06 03 CD 63 17 21 AA 85 CD DF 00 C9 +!8500 22 1D 43 AF 32 1F 43 32 20 43 11 1D 43 01 32 40 +!8510 CD 14 85 C9 E5 C5 D5 1A 6F 13 1A 67 13 0A 5F 03 +!8520 0A 57 19 D1 C1 7D 02 03 7C 02 03 13 13 C5 D5 1A +!8530 6F 13 1A 67 13 0A 5F 03 0A 57 ED 5A D1 C1 7D 02 +!8540 03 7C 02 E1 C9 CD 97 14 DD 23 DD 23 DD E5 E1 11 +!8550 32 40 18 00 C5 06 00 0E 04 ED B0 C1 C9 E5 C5 06 +!8560 0B 1A 4F 7E A9 20 07 05 20 F7 C1 E1 37 C9 C1 E1 +!8570 37 3F C9 06 0B E5 AF 77 23 10 FC E1 06 0D 1A B7 +!8580 C8 05 C8 FE 2E 20 0A 13 78 FE 05 38 F1 23 05 18 +!8590 F7 1A 77 23 13 C3 7E 85 46 69 6C 65 20 6E 6F 74 +!85A0 20 66 6F 75 6E 64 21 0D 0A 00 20 46 69 6C 65 20 +!85B0 6C 6F 63 61 74 65 64 21 0D 0A 00 2A 35 43 7C 6F +!85C0 AF 67 ED 4B 17 43 09 22 37 43 AF 32 39 43 32 3A +!85D0 43 CD 97 14 DD 23 DD 23 DD E5 D1 01 37 43 CD 14 +!85E0 85 CD 3A 80 21 37 43 06 01 CD BE 14 21 17 41 06 +!85F0 14 CD C9 16 3A 35 43 17 6F 3E 00 17 67 11 17 41 +!8600 19 11 35 43 ED A0 ED A0 CD 3A 80 C9 E3 F5 C5 7E +!8610 FE 00 28 06 CD D7 00 23 18 F5 23 C1 F1 E3 C9