pushed updates

This commit is contained in:
Dennis Gunia
2024-06-24 09:21:16 +02:00
parent 488efa3907
commit d18e8e9e69
197 changed files with 316846 additions and 223785 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1 @@
../../monitor_v2/zout/symbols.s

View File

@@ -0,0 +1,5 @@
export OPT_GEN_SYMBOLTABLE=0
export OPT_GEN_MONFILE=1
export OPT_GEN_OBJFILE=1
export OPT_WRITEROM=0
export FILENAME=test

View File

@@ -0,0 +1,93 @@
.include "extern_symbols.s" ;include monitor symbols.
START_ADDR .EQU 0x8000
org START_ADDR
com_header:
jp com_prg
db 0x00
dw 0x00, 0x00, 0x00 ;always 0
dw [START_ADDR] ;start addr
dw [_eof] ;end of file
dw [_eof - START_ADDR] ;length
dc 48,0x00
com_prg:
;shadow rom
call B_PRINTINLINE
db 10,13,"Shadowing ROM @ 0x0000-0x3FFF ...",10,13,0
ld a,0x01 ;set bit1 to switch to ram
out (0x00),a ;store to bank select register
ld hl,[prg_start]
ld de,0
ld bc,[prg_end-prg_start]
ldir
jp 0x0000
prg_start:
phase 0x0000
BASRST_00: ;Hardware Restart
jp CSTART
defs 5
;org 0x0008
BASRST_08 ;Print Char
jp _BASRST_08
defs 5
;org 0x0010
BASRST_10 ;receive char
jp _BASRST_10
defs 5
;org 0x0018
BASRST_18 ;Buffer length
jp _BASRST_18
defs 5
;org 0x0044
_BASRST_08:
out (CS_SIO_A_D),a
_wait:
ld a,1
out (CS_SIO_A_C),A
in A,(CS_SIO_A_C) ;read RRx
bit 0,A
jr z,_wait
ret
_BASRST_10:
;RTS ON
ld a,005h ;write into WR0: select WR5
out (CS_SIO_A_C),A
ld a,0EAh ;DTR active, TX 8bit, BREAK off, TX on, RTS active
out (CS_SIO_A_C),A
nop
;read if avail
xor a ; a = 0
out (CS_SIO_A_C), a ; select reg 0
in a, (CS_SIO_A_C) ; read reg 0
and 1 ; mask D0 (recieve char available)
;RTS OFF
push af
ld a,005h ;write into WR0: select WR5
out (CS_SIO_A_C),A
ld a,068h ;DTR inactive, TX 8bit, BREAK off, TX on, RTS inactive
out (CS_SIO_A_C),A
pop af
ret Z ; return 0 if no char
;read data
in a, (CS_SIO_A_D) ; read char if avail
ret ; return
_BASRST_18:
ld a,0
ret
BASSTART:
.include "basic.s"
_WORKSPACE:
dephase
prg_end:
_eof:

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,487 @@
:10800000C340800000000000000000805E9E5E1EF5
:108010000000000000000000000000000000000060
:108020000000000000000000000000000000000050
:108030000000000000000000000000000000000040
:10804000CDD0010A0D536861646F77696E67205265
:108050004F4D2040203078303030302D307833464E
:108060004646202E2E2E0A0D003E01D300217B8095
:1080700011000001E31DEDB0C30000C35A00000071
:10808000000000C320000000000000C32D0000001D
:10809000000000C34B000000000000D3083E01D3E5
:1080A00009DB09CB4728F6C93E05D3093EEAD309C7
:1080B00000AFD309DB09E601F53E05D3093E68D3DD
:1080C00009F1C8DB08C93E00C9C35A00C3DD000579
:1080D0000109D210C021E31DF9AF32301E211E0369
:1080E000015A0011E31DEDB0EBF9CD2605CD190BBA
:1080F00032841E32D31E21371F237CB5CAA2007ED4
:10810000472F77BE70CA7E00C3A200CD1B09B7C23D
:10811000EB03EB2B3ED94677BE70C27B002B1136AA
:108120001F7C9220027D93DA7B0011CEFF22891EF4
:108130001922341ECD01052A341E11EFFF1911D367
:108140001E7D936F7C9A67E521F500CD0212E1CD8B
:10815000CF1821E600CD021231401ECD2605C339CD
:108160000420427974657320667265650D0A00000B
:108170005A38302042415349432056657220342EEC
:1081800037630D0A436F70797269676874202843FA
:10819000292031393738206279204D6963726F7335
:1081A0006F66740D0A4D6F64696669656420666F59
:1081B00072205A38432062792044656E6E697320BC
:1081C00047756E69610D0A00004D656D6F7279200B
:1081D000746F70004E1704186417E61DB0105E141B
:1081E000DE10DC19D51AE415371A631B691BCF1B87
:1081F000E91BB214551C8B13821125149A13AB136F
:10820000EE1C811DBB13EB13F513C54E44C64F5234
:10821000CE455854C4415441C94E505554C4494D9B
:10822000D2454144CC4554C74F544FD2554EC94610
:10823000D24553544F5245C74F535542D2455455DA
:10824000524ED2454DD3544F50CF5554CF4ECE55AC
:108250004C4CD7414954C44546D04F4B45C44F4B75
:1082600045CC494E4553C34C53D749445448CD4F50
:108270004E49544F52D245534554D052494E54C39F
:108280004F4E54CC495354C34C454152C84C4F41B6
:1082900044CE4557D4414228D44FC64ED3504328EC
:1082A000D448454ECE4F54D3544550ABADAAAFDE63
:1082B000C14E44CF52BEBDBCD3474EC94E54C1423D
:1082C00053D55352C65245C94E50D04F53D3515235
:1082D000D24E44CC4F47C55850C34F53D3494ED4C8
:1082E000414EC1544ED045454BC445454BCC454EFF
:1082F000D3545224D6414CC15343C3485224C84599
:108300005824C2494E24CC45465424D249474854A7
:1083100024CD4944248099088D079B0CF0099A0BC1
:10832000F00EC90B070AAA098D09970A5E08990978
:10833000CB09F20997086A14790AD8087014E61074
:10834000B914601C461C381C3E1C351C5900BB0A65
:10835000C50804074409771C000579B61879D714B5
:108360007C23167C8E167FED1950440E46430E4E2C
:1083700046534E52474F4446434F564F4D554C423D
:108380005344442F304944544D4F534C535354435A
:108390004E55464D4F4858424EC3DD00C31609D3D3
:1083A00000C9D6006F7CDE006778DE00473E00C95A
:1083B000000000354ACA99391C76982295B3980A6C
:1083C000DD479853D199990A1A9F9865BCCD98D6E4
:1083D000773E9852C74F80DB00C901FF1C00001494
:1083E00000140000000000C33906371FFEFFD41E32
:1083F00003204572726F720020696E20004F6B0D72
:108400000A0000427265616B00210400397E23FE80
:1084100081C04E234623E569607AB3EBCAAB03EB18
:108420007C9220027D93010D00E1C809C39203CD27
:10843000D103C5E3C17C9220027D937E02C80B2B41
:10844000C3BA03E52AB41E060009093EE53ED095ED
:108450006F3EFF9CDAE0036739E1D81E0CC3FF03CF
:108460002AA31E22361E1E02011E14011E00011E1A
:1084700012011E22011E0A011E18CD260532281ED9
:10848000CD0C0B21F402573E3FCDC706197ECDC758
:1084900006CD4F08CDC706217603CD02122A361E1F
:1084A00011FEFF7C9220027D93CA5A007CA53CC439
:1084B000C7183EC1AF32281ECD0C0B218203CD025E
:1084C0001221FFFF22361ECD311EDA4604CD4F08A1
:1084D0003C3DCA4604F5CD1B09D5CD500547D1F129
:1084E000D22F08D5C5AF32A61ECD4F08B7F5CDDDCA
:1084F00004DA7F04F1F5CAC609B7C5D29904EB2A9C
:10850000B01E1A0203137C9220027D93C28704607E
:108510006922B01ED1F1CAC0042AB01EE3C109E528
:10852000CDB403E122B01EEB74D123237323722355
:10853000113B1E1A772313B7C2B804CD0C0523EBE9
:10854000626B7E23B6CA4604232323AFBE23C2D167
:1085500004EB732372C3C5042A381E444D7E23B630
:108560002BC823237E23666F7C9220027D93606953
:108570007E23666F3FC83FD0C3E004C02A381EAFD9
:108580007723772322B01E2A381E2B22A81E2A8981
:108590001E229D1EAFCD5E082AB01E22B21E22B43E
:1085A0001EC12A341EF9218D1E228B1EAF6F672239
:1085B000AE1E32A51E22B81EE5C52AA81EC93E3F22
:1085C000CDC7063E20CDC706C3311EAF32881E0E72
:1085D00005113B1E7EFE20CAD80547FE22CAF805BB
:1085E000B7CAFF053A881EB77EC2D805FE3F3E9C3B
:1085F000CAD8057EFE30DA8305FE3CDAD805D511EF
:108600008E01C501D405C5067F7EFE61DA9C05FE9C
:108610007BD29C05E65F774EEB23B6F29E05047E87
:10862000E67FC8B9C29E05EBE5131AB7FAD0054F2D
:1086300078FE88C2BF05CD4F082B237EFE61DAC8C5
:1086400005E65FB9CAAE05E1C39C0548F1EBC9EB8D
:1086500079C1D12312130CD63ACAE605FE49C2E904
:108660000532881ED654C25905477EB7CAFF05B8E1
:10867000CAD80523120C13C3EF05213A1E12131298
:108680001312C93A271EB73E0032271EC21C060528
:10869000CA311ECDC7063E052BCA30067ECDC706A1
:1086A000C34206052BCDC706C24206CDC706CD196B
:1086B0000BC3311E213B1E0601AF32271ECDF5062E
:1086C0004FFE7FCA08063A271EB7CA5B063E00CD9A
:1086D000C706AF32271E79FE07CA9F06FE03CC19D4
:1086E0000B37C8FE0DCA140BFE15CA3306FE40CA6E
:1086F0003006FE5FCA2806FE08CA2806FE12C29A85
:1087000006C5D5E53600CDEF06213B1ECD0212E1B0
:10871000D1C1C34206FE20DA420678FE493E07D2A6
:10872000B406797132A61E2304CDC706C34206CD16
:10873000C7063E08C3AE067EE3BE23E3CA4F08C3A6
:10874000EB03F53A281EB7C23A12F1C5F5FE20DA5E
:10875000EB063A251E473A851E04CAE70605B8CC43
:10876000190B3C32851EF1C1CFC9CDC706C3190B09
:10877000D7E67FFE0FC03A281E2F32281EAFC9CD84
:108780001B09C0C1CDDD04C5CD5A07E14E234623E8
:1087900078B1CA3904CD6307CD7908C5CD190B5E10
:1087A000235623E5EBCDCF183E20E1CDC7067EB79B
:1087B00023CA1007F23007D67F4F118F011A13B763
:1087C000F242070DC24207E67FCDC7061A13B7F281
:1087D0004C07C33307E52A2B1E22291EE1C9E5D524
:1087E0002A291E11FFFFED5A22291ED1E1F0E52AA8
:1087F0002B1E22291ED7FE03CA8407E1C363072A62
:108800002B1E22291EC3E0003E6432A51ECD070A9E
:10881000C1E5CDF00922A11E21020039CD9203D17C
:10882000C2C10709D52B562B5E2323E52AA11E7C46
:1088300092C2BB077D93E1C2A107D1F9EB0E08CD2F
:10884000C803E52AA11EE3E52A361EE3CDF90CCDC7
:10885000BC06A3CDF60CED5BBE1EED4BC01EC5D510
:10886000010081515A7EFEA83E01C20308CD4F0887
:10887000CDF60CED5BBE1EED4BC01ECD3F17C5D532
:10888000F533E52AA81EE30681C533CD790822A871
:108890001E7EFE3ACA2F08B7C2EB03237E23B6CA58
:1088A000A108235E2356ED53361ECD4F0811100844
:1088B000D5C8D680DA070AFE22D2EB03074F06009E
:1088C000EB219B02094E2346C5EB237EFE3AD0FEE8
:1088D0002028F7FE303F3C3DC9EB2A381ECA7308FA
:1088E000EBCD1B09E5CDDD046069D1D2C6092B2291
:1088F000B61EEBC9DFB7C8D7FE1B2811FE03280D33
:10890000FE13C0D7FE11C8FE03280718F63EFF323B
:10891000301EC0F6C022A81E21F6FFC12A361EF561
:108920007DA43CCAB40822AC1E2AA81E22AE1EAFEB
:1089300032281ECD0C0BF1218803C21F04C3390459
:108940002AAE1E7CB51E20CAFF03EB2AAC1E2236BF
:108950001EEBC9CDA114C032241EC9E52A2D1E0666
:10896000004F09222D1EE1C97EFE41D8FE5B3FC9A2
:10897000CD4F08CDF60CCD3F17FA16093AC11EFEB1
:1089800090DAD417018090110000E5CDA717E151CE
:10899000C81E08C3FF032B110000CD4F08D0E5F51A
:1089A0002198197C92C22F097D93DAEB03626B192F
:1089B000291929F1D6305F160019EBE1C31F09CA46
:1089C0001005CDF8082BCD4F08E52A891ECA670986
:1089D000E1CDBC062CD5CDF8082BCD4F08C2EB035A
:1089E000E3EB7D935F7C9A57DAE003E52AB01E0142
:1089F0002800097C9220027D93D2E003EB22341EF2
:108A0000E122891EE1C31005CA0C05CD1005011035
:108A100008C3A9090E03CDC803C1E5E52A361EE344
:108A20003E8CF533C5CD1B09CDF209E52A361E7CF7
:108A30009220027D93E123DCE004D4DD0460692B05
:108A4000D81E0EC3FF03C016FFCD8E03F9FE8C1E89
:108A500004C2FF03E122361E237CB5C2EA093AA60E
:108A60001EB7C23804211008E33EE1013A0E0006A9
:108A7000007948477EB7C8B8C823FE22CAF609C3A2
:108A8000F909CDF50ECDBC06B1D53A871EF5CD0856
:108A90000DF1E322A81E1FCDFB0CCA690AE52ABE10
:108AA0001EE523235E23562A381E7C9220027D93E6
:108AB000D2520A2A341E7C9220027D93D1D25A0AC5
:108AC00021991E7C9220027D93D25A0A3ED1CD7705
:108AD00013EBCD9211CD7713E1EBEDA0EDA0EDA05E
:108AE000EDA0E1C9E511BE1EEBEDA0EDA0EDA0EDFE
:108AF000A0D1E1C9CDA1147E47FE8CCA880ACDBCA5
:108B000006882B4B0D78CA3708CD1C09FE2CC0C334
:108B1000890ACD080D7EFE88CAA50ACDBC06A62B03
:108B2000CDF90CCD3F17CAF209CD4F08DAAA09C317
:108B300036082BCD4F08CA190BC8FEA2CA4C0BFE33
:108B4000A5CA4C0BE5FE2CCA350BFE3BCA6F0BC108
:108B5000CD080DE53A871EB7C2050BCDDA18CDB6A4
:108B60001136202ABE1E342ABE1E3A251E4704CACC
:108B7000010B043A851E863DB8D4190BCD0512AF02
:108B8000C40512E1C3B70A3A851EB7C8C3190B362C
:108B900000213A1E3E0DCDC7063E0ACDC706AF32B4
:108BA000851E3A241E3DC8F5AFCDC706F1C32A0B7A
:108BB0003A261E473A851EB8D4190BD26F0BD60E33
:108BC000D2430B2FC3640BF5CD9E14CDBC06292BCD
:108BD000F1D6A5E5CA5F0B3A851E2F83D26F0B3CF9
:108BE000473E20CDC70605C2680BE1CD4F08C3BE86
:108BF0000A3F5265646F2066726F6D2073746172F4
:108C0000740D0A003AA71EB7C2E503C121760BCD49
:108C10000212C33F05CD63117EFE223E0032281EA4
:108C2000C2B40BCDB711CDBC063BE5CD05123EE578
:108C3000CD4305C1DA9E08237EB72BC5CAEF09369E
:108C40002CC3CE0BE52AB61EF6AF32A71EE3C3DA5D
:108C50000BCDBC062CCDF50EE3D57EFE2CCA020C46
:108C60003AA71EB7C2780C3E3FCDC706CD4305D10B
:108C7000C1DA9E08237EB72BC5CAEF09D53A871EF5
:108C8000B7CA2C0CCD4F085747FE22CA200C3AA772
:108C90001EB757CA1D0C163A062C2BCDBA11EB2164
:108CA000400CE3D5C3220ACD4F08CD3718E311BEDF
:108CB0001EEBEDA0EDA0EDA0EDA0E12BCD4F08CA7D
:108CC0004C0CFE2CC2890BE32BCD4F08C2D60BD126
:108CD0003AA71EB7EBC27408D5B621670CC40212BE
:108CE000E1C93F45787472612069676E6F7265648F
:108CF0000D0A00CDF009B7C2900C237E23B61E06E4
:108D0000CAFF03235E2356ED53A31ECD4F08FE83F7
:108D1000C2780CC3020C110000C4F50E22A81ECDAF
:108D20008E03C2F103F9D57E23F5D511BE1EEDA049
:108D3000EDA0EDA0EDA0E3E5CDCD14D121BE1EED5B
:108D4000A0EDA0EDA0EDA0E1CD8917E5CDA717E13D
:108D5000C190CD8917CAE60CEB22361E6960C30CA0
:108D600008F92AA81E7EFE2CC21008CD4F08CD9E01
:108D70000CCD080DF6373A871E8FB7E8C3FD03CD3B
:108D8000BC06282B1600D50E01CDC803CD820D22BE
:108D9000AA1E2AAA1EC178FE78D4F90C7E1600D627
:108DA000B0DA400DFE03D2400DFE0117AABA57DA21
:108DB000EB03229F1ECD4F08C3240D7AB7C2700E5D
:108DC0007E229F1ED6A9D8FE07D05F3A871E3DB3EC
:108DD0007BCA091307835F21DF02197856BAD023B3
:108DE000CDF90CC501170DC5ED4BBE1EC5ED4BC031
:108DF0001EC54E234623C52A9F1EC30B0DAF3287C7
:108E00001ECD4F081E24CAFF03DA3718CDED08D255
:108E1000EA0DFEA9CA820DFE2ECA3718FEAACAD9CB
:108E20000DFE22CAB711FEA7CAD00EFEA4CA1311A6
:108E3000FE26C2CC0DCD4F08FE48CA431DFE42CAD5
:108E4000B31D1E02CAFF03D6B3D2FB0DCD040DCD58
:108E5000BC0629C9167DCD0B0D2AAA1EE5CD6817C3
:108E6000CDF90CE1C9CDF50EE5EB22BE1E3A871E09
:108E7000B7CC7D17E1C90600074FC5CD4F0879FE75
:108E80002FDA220ECD040DCDBC062CCDFA0CEB2A28
:108E9000BE1EE3E5EBCDA114EBE3C32A0ECDD10D4D
:108EA000E311E50DD5015901094E236669E915FE67
:108EB000AAC8FE2DC814FE2BC8FEA9C82BC9F6AF40
:108EC000F5CDF90CCD0109F1EBC1E3EBED53BE1E7D
:108ED000ED43C01EF5CD0109F1C17921D110C26B5E
:108EE0000EA34F78A2E9B34F78B2E921820E3A87F8
:108EF0001E1F7A175F166478BAD0C3680D840E7986
:108F0000B71FC1D1F5CDFB0C21C60EE5CAA717AF1F
:108F100032871ED5CD56137E23234E2346D1C5F569
:108F2000CD5A13CD8917F157E17BB2C87AD601D853
:108F3000AFBB3CD0151D0ABE2303CAAE0E3FC34AC9
:108F4000173C8FC1A0C6FF9FC35117165ACD0B0DFA
:108F5000CDF90CCD01097B2F4F7A2FCDD110C1C394
:108F6000170D2BCD4F08C8CDBC062C01E70EC5F65A
:108F7000AF32861E46CDED08DAEB03AF4F32871EC7
:108F8000CD4F08DA110FCDED08DA1E0F4FCD4F0887
:108F9000DA120FCDED08D2120FD624C22D0F3C32BB
:108FA000871E0F814FCD4F083AA51E3DCAE80FF22C
:108FB0003D0F7ED628CAC00FAF32A51EE550592AF4
:108FC000B81E7C92C24E0F7D9311BA1ECA75132A29
:108FD000B21EEB2AB01E7C92C2620F7D93CA780F3C
:108FE000799623C26D0F789623CAB20F23232323C9
:108FF000C35B0FE1E3D511ED0D7C9220027D93D18F
:10900000CAB50FE3E5C50106002AB41EE509C1E5AE
:10901000CDB403E122B41E606922B21E2B36007C5F
:109020009220027D93C2A10FD173237223EBE1C979
:1090300032C11E21810322BE1EE1C9E52A861EE33C
:1090400057D5C5CDF508C1F1EBE3E5EB3C577EFE06
:109050002CCAC60FCDBC062922AA1EE122861E1EDE
:1090600000D511E5F52AB21E3E19ED5BB41E7C92C7
:10907000C2FA0F7D93CA23107EB923C205107EB8B1
:10908000235E235623C2EE0F3A861EB7C2F403F1C5
:10909000444DCA751396CA84101E10C3FF031104F1
:1090A00000F1CA1609712370234FCDC80323232270
:1090B0009F1E71233A861E1779010B00D24610C1FC
:1090C0000371237023F5E5CD1D18EBE1F13DC23EA0
:1090D00010F5424BEB19DAE003CDD10322B41E2B7D
:1090E00036007C9220027D93C2641003572A9F1E93
:1090F0005EEB2909EB2B2B73237223F1DAAC1047BB
:109100004F7E2316E15E235623E3F57C92C297102F
:109110007D93D21E10E5CD1D18D119F13D444DC2ED
:1091200089102929C109EB2AAA1EC92AB41EEB21DC
:109130000000393A871EB7CACC10CD5613CD48125D
:109140002A341EEB2A9D1E7D934F7C9A41501E00AF
:1091500021871E730690C356173A851E47AFC3D2A8
:1091600010CD7111CD631101F009C5D5CDBC062814
:10917000CDF50EE5EB2B562B5EE1CDF90CCDBC0603
:1091800029CDBC06B1444DE3712370C3B011CD713C
:1091900011D5CDD10DCDF90CE35E2356237AB3CA98
:1091A000F7037E23666FE52AB81EE322B81E2ABCA9
:1091B0001EE52ABA1EE5D511BA1E21BE1EEDA0ED90
:1091C000A0EDA0EDA0E1CDF60C2BCD4F08C2EB0336
:1091D000E122BA1EE122BC1EE122B81EE1C9E52A45
:1091E000361E237CB5E1C01E16C3FF03CDBC06A40A
:1091F0003E8032A51EB647CDFA0EC3F90CCDF90C50
:10920000CDDA18CDB611CD561301B713C57E232381
:10921000E5CD1B12E14E2346CDAA11E56FCD4913D2
:10922000D1C9CD1B1221991EE5772323732372E147
:10923000C92B062250E50EFF237E0CB7CACC11BA0B
:10924000CACC11B8C2BD11FE22CC4F08E323EB7982
:10925000CDAA1111991E2A8B1E22BE1E3E013287F5
:109260001EEBEDA0EDA0EDA0EDA0EB7C9220027D29
:1092700093228B1EE17EC01E1EC3FF0323CDB611B9
:10928000CD5613CD89171C1DC80ACDC706FE0DCCBF
:10929000230B03C30C12B70EF1F52A341EEB2A9DE3
:1092A0001E2F4F06FF09237C9220027D93DA3C1289
:1092B000229D1E23EBF1C9F11E1ACAFF03BFF5015F
:1092C0001D12C52A891E229D1E210000E52A341E7A
:1092D000E5218D1EED5B8B1E7C9220027D93015952
:1092E00012C2B5122AB01EED5BB21E7C9220027D26
:1092F00093CA84127E2323B7CDB812C36C12C1ED7A
:109300005BB41E7C9220027D93CAE412CD89177B48
:10931000E509B7F28312229F1EE14E0600090923D8
:10932000ED5B9F1E7C9220027D93CA841201A512E0
:10933000C5F6807E23235E235623F0B7C8444D2A0A
:109340009D1E7C9220027D936069D8E1E37C92208F
:10935000027D93E3E56069D0C1F1F1E5D5C5C9D1DE
:10936000E17DB4C82B462B4EE52B2B6E2600095011
:10937000592B444D2A9D1ECDB703E17123706960BE
:109380002BC34B12C5E52ABE1EE3CD820DE3CDFAF9
:109390000C7EE52ABE1EE5861E1CDAFF03CDA71152
:1093A000D1CD5A13E3CD5913E52A9B1EEBCD4013C3
:1093B000CD401321140DE3E5C3D811E1E37E23234F
:1093C0004E23466F2C2DC80A120313C34A13CDFA3D
:1093D0000C2ABE1EEBCD7713EBC0D550591B4E2A7D
:1093E0009D1E7C9220027D93C275134709229D1E0B
:1093F000E1C92A8B1E2B462B4E2B2B7C9220027D03
:1094000093C0228B1EC901E110C5CD5313AF573253
:10941000871E7EB7C901E110C5CD8F13CA16092377
:10942000235E23561AC93E01CDA711CDA4142A9B51
:109430001E73C1C3D811CD5414AFE34FE57EB8DA23
:10944000C91378110E00C5CD1B12C1E1E5232346D7
:10945000236668060009444DCDAA116FCD4913D18A
:10946000CD5A13C3D811CD5414D1D51A90C3BF13FC
:10947000EB7ECD59140405CA1609C51EFFFE29CA84
:109480000E14CDBC062CCDA114CDBC0629F1E301F0
:10949000C113C53DBE0600D04F7E91BB47D843C91E
:1094A000CD8F13CA4A155F23237E23666FE51946C5
:1094B00072E3C57EFE24C24314CD431D180DFE2564
:1094C000C24D14CDB31D1803CD3718C1E170C9EBDF
:1094D000CDBC0629C1D1C543C9CDA41432221ECDAD
:1094E000211EC3E110CD8E14C3E91DCD8E14F51ECF
:1094F000002BCD4F08CA8414CDBC062CCDA114C1BD
:10950000CD211EABA0CA8514C9CDA11432221E32B2
:10951000EA1DCDBC062CC3A114CD4F08CDF60CCD51
:10952000FB087AB7C216092BCD4F087BC9CD0109BC
:109530001AC3E110CDF60CCD0109D5CDBC062CCD5A
:10954000A114D112C921C119CD8917C3DC14CD8949
:109550001721C1D1CD681778B7C83AC11EB7CA79EB
:109560001590D2FE142F3C2ABE1EE52AC01EE5ED42
:1095700053BE1EED43C01EC1D1FE19D0F5CD9217CA
:1095800067F1CDAF15B421BE1EF22415CD8F15D2D3
:109590006A152334CAFA032E01CDC515C36A15AF67
:1095A00090477E9B5F237E9A57237E994FDC9B15C5
:1095B0006863AF4779B7C257154A54656F78D608C4
:1095C000FEE0C23815AF32C11EC905297A17577996
:1095D0008F4FF24F15785C45B7CA6A1521C11E86B8
:1095E00077D24A15C87821C11EB7FC821546237E62
:1095F000E680A94FED53BE1EED43C01EC91CC0142A
:10960000C00CC00E8034C0C3FA037E835F237E8A01
:1096100057237E894FC921C21E7E2F77AF6F904797
:109620007D9B5F7D9A577D994FC90600D608DABEAB
:1096300015435A510E00C3B115C6096FAF2DC87935
:109640001F4F7A1F577B1F5F781F47C3C11500004C
:10965000008103AA561980F122768045AA3882CD6E
:109660003F17B7EA160921C11E7E01358011F304A8
:1096700090F570D5C5CDDC14C1D104CD901621D3A1
:1096800015CDD31421D715CD981A01808011000073
:10969000CDDC14F1CDAB1801318011187221C1D18C
:1096A000CD3F17C82E00CDF8167932D01EEB22D14F
:1096B0001E0100005058213515E5214716E5E5212A
:1096C000BE1E7E23B7CA7316E52E081F6779D261C6
:1096D00016E52AD11E19EBE13AD01E891F4F7A1FD9
:1096E000577B1F5F781F472D7CC25016E1C9435A34
:1096F000514FC92ABE1EE52AC01EE5012084110073
:1097000000ED53BE1EED43C01EC1D1CD3F17CAEEC2
:10971000032EFFCDF81634342B7E32F51D2B7E320E
:10972000F11D2B7E32ED1D41EBAF4F575F32F81D1F
:10973000E5C57DCDEC1DDE003FD2C81632F81DF127
:10974000F137D2C1E1793C3D1FFA6B15177B175FEA
:109750007A175779174F297817473AF81D1732F8B3
:109760001D79B2B3C2B516E521C11E35E1C2B516E9
:10977000C3FA0378B7CA1C177D21C11EAE80471FEC
:10978000A878F21B17C68077CA7513CD9217772B6E
:10979000C9CD3F172FE1B7E1F24A15C3FA03ED5BDC
:1097A000BE1EED4BC01E78B7C8C602DAFA0347CD1D
:1097B000DC1421C11E34C0C3FA033AC11EB7C83A33
:1097C000C01EFE2F179FC03CC9CD3F170688110051
:1097D0000021C11E4F70060023368017C33215CDFD
:1097E0003F17F021C01E7EEE8077C9EB2ABE1EE334
:1097F000E52AC01EE3E5EBC911BE1EEDA0EDA0ED0C
:10980000A0EDA0C95E2356234E234623C921C01EC6
:109810007E07371F773F1F2323777907371F4F1F97
:10982000AEC978B7CA3F17214817E5CD3F1779C8A9
:1098300021C01EAE79F8CDC1171FA9C92378BEC0BB
:109840002B79BEC02B7ABEC02B7B96C0E1E1C94705
:109850004F575FB7C8E5ED5BBE1EED4BC01ECD9206
:1098600017AE67FCFD173E9890CDAF157C17DC82D4
:10987000150600DC9B15E1C91B7AA33CC00BC9216E
:10988000C11E7EFE983ABE1ED07ECDD41736987B80
:10989000F57917CD3215F1C921000078B1C87806E5
:1098A0001029DA1E10CB1117D2341819DA1E101035
:1098B000F0C9FE2DF5CA4318FE2BCA43182BCD4A1A
:1098C0001547575F2F4FCD4F08DA9418FE2ECA6FF9
:1098D00018FE45C27318CD4F08CD330ECD4F08DAB0
:1098E000BB1814C27318AF935F0C0CCA4B18E57BFE
:1098F00090F48C18F28218F5CD7816F13CC27618E7
:10990000D1F1CC6817EBC9C8F5CD2317F13DC9D506
:1099100057788947C5E5D5CD2317F1D630CDAB189B
:10992000E1C1D1C34B182ABE1EE52AC01EE5CD51A8
:1099300017C1D1C3DC147B0707830786D6305FC30A
:109940006118E5217D03CD0212E1EBAF0698CD56FB
:1099500017210112E521C31EE5CD3F173620F2E89D
:1099600018362D233630CAAC19E5FC6817AFF5CD93
:10997000B21901439111F84FCDA717B7E21519F1AC
:10998000CD8D18F5C3F718CD7816F13CF5CDB21989
:10999000CDCA143CCDD417ED53BE1EED43C01E01FD
:1099A0000603F1813CFA3619FE08D236193C473ECF
:1099B000023D3DE1F511C51905C24719362E233682
:1099C000302305362ECC9017C5E5EBED5BBE1EEDC2
:1099D0004BC01E062F047B965F237A9E5723799EE9
:1099E0004F2B2BD25A19CD8F1523ED53BE1EED43AD
:1099F000C01EEBE17023C10DC2471905CA90192B97
:109A00007EFE30CA8419FE2EC49017F1CAAF1936F3
:109A10004523362BF2A019362D2F3C062F04D60AEB
:109A2000D2A219C63A237023772371E1C901749435
:109A300011F723CDA717B7E1E20C19E90000008068
:109A4000A08601102700E803006400000A0000015E
:109A50000000216817E3E9CD701721C11911BE1E5E
:109A6000EDA0EDA0EDA0EDA0C1D1CD3F1778CA3794
:109A70001AF2FD19B7CAEE03B7CA4B15D5C579F668
:109A80007FED5BBE1EED4BC01EF21F1AD5C5CD0487
:109A900018C1D1F5CDA717E17C1FE122C01EE1223C
:109AA000BE1EDCD719CC6817D5C5CDE415C1D1CD04
:109AB0002516CD7017013881113BAACD25163AC164
:109AC0001EFE88D21617CD0418C680C602DA1617F5
:109AD000F521D315CDCD14CD1C16F1C1D1F5CDD9BD
:109AE00014CD681721771ACDAC1A110000C14AC3F2
:109AF000251608402E9474704F2E776E02887AE6F1
:109B0000A02A7C50AAAA7EFFFF7F7F0000808100F0
:109B1000000081CD7017112316D5E5ED5BBE1EED5B
:109B20004BC01ECD2516E1CD70177E2311BE1EED54
:109B3000A0EDA0EDA0EDA006F1C1D13DC8D5C5F5C1
:109B4000E5CD2516E1CD8917E5CDDC14E1C3BD1ABD
:109B5000CD3F1721FC1DFA4F1B211D1E11BE1EED0E
:109B6000A0EDA0EDA0EDA021FC1DC886E607060033
:109B7000772387874F09CD8917CD25163AFB1D3CE2
:109B8000E6030600FE018832FB1D21531B87874F29
:109B900009CDCD14ED5BBE1EED4BC01E7B59EE4FC3
:109BA0004F21C21E36802B46368021FA1D347ED6C8
:109BB000ABC23D1B770C151CCD3515111D1E21BEEA
:109BC0001EEDA0EDA0EDA0EDA0C9772B772B77C3FC
:109BD000191B68B1466899E9926910D1756821B27C
:109BE0001BCDCD14CD701701498311DB0FED53BE92
:109BF0001EED43C01EC1D1CD9016CD7017CD0418F7
:109C0000C1D1CDD91421B61BCDD314CD3F1737F216
:109C10009E1BCDCA14CD3F17B7F5F4681721B61BAC
:109C2000CDCD14F1D4681721BA1BC3981ADB0F49A4
:109C3000810000007F05BAD71E86642699875834B4
:109C40002387E05DA586DA0F4983CD7017CD691BA8
:109C5000C1E1CD7017EBED53BE1EED43C01ECD63C9
:109C60001BC38E16CD3F17FCD719FC68173AC11ECF
:109C7000FE81DA061C0100815159CD901621D314C2
:109C8000E521101CCD981A21B21BC9094AD73B788F
:109C9000026E847BFEC12F7C74319A7D843D5A7D97
:109CA000C87F917EE4BB4C7E6CAAAA7F0000008135
:109CB000C300003E0CCFC9ED45CDA1147B32251E5B
:109CC000C9CDF60CCD0109ED53291EED532B1EC94C
:109CD000CD0109D5E146237EC3D210CDF60CCD01CE
:109CE00009D5CDBC062CCDF60CCD0109E37323724A
:109CF000E1C9C0CD961C1B2A891EAFED52380BED71
:109D000053891E21CEFF1922341E13ED53E71D186F
:109D100021D7FE3A20FB0E00CDD41C47CDD41C57D2
:109D2000CDD41C5FCDD41C3D281A3CC2FD03C9CD47
:109D3000961CCDD41C121310F9CDD41C79B7C27C5B
:109D40001DC3B41CCDD41C79B7C27C1DC3E000CDAB
:109D5000E51C070707076FCDE51CB56F814F7DC96F
:109D6000D7D630FE0AD8D607C9CDF90CCD0109C522
:109D700021C31E7AFE00280CCD261D78FE30280255
:109D8000702371237BCD261D7AFE00200578FE30DE
:109D9000280270237123AF772377C121C31EC388A4
:109DA0001147E60FFE0A3802C607C6304F780F0F7C
:109DB0000F0FE60FFE0A3802C607C63047C9EB216F
:109DC0000000CD5C1DDA7C1D1805CD5C1D381F29F7
:109DD000292929B56F18F3131AFE20CA5C1DD63045
:109DE000D8FE0A3805D607FE0AD8FE103FC9EB7A1E
:109DF0004BE5CDD110E1C91E26C3FF03CDF90CCD33
:109E00000109C521C31E06110578FE012808CB13E0
:109E1000CB1230F41804CB13CB123E30CE00772394
:109E20000520F3AF772377C121C31EC38811EB212F
:109E30000000CDD01DDADE1DD63029B56FCDD01D86
:109E400030F6EB7A4BE5CDD110E1C9131AFE20CAEA
:0E9E5000D01DFE30D8FE323FC91E28C3FF03CE
:00000001FF

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,486 @@
!8000 C3 40 80 00 00 00 00 00 00 00 00 80 5E 9E 5E 1E
!8010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
!8020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
!8030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
!8040 CD D0 01 0A 0D 53 68 61 64 6F 77 69 6E 67 20 52
!8050 4F 4D 20 40 20 30 78 30 30 30 30 2D 30 78 33 46
!8060 46 46 20 2E 2E 2E 0A 0D 00 3E 01 D3 00 21 7B 80
!8070 11 00 00 01 E3 1D ED B0 C3 00 00 C3 5A 00 00 00
!8080 00 00 00 C3 20 00 00 00 00 00 00 C3 2D 00 00 00
!8090 00 00 00 C3 4B 00 00 00 00 00 00 D3 08 3E 01 D3
!80A0 09 DB 09 CB 47 28 F6 C9 3E 05 D3 09 3E EA D3 09
!80B0 00 AF D3 09 DB 09 E6 01 F5 3E 05 D3 09 3E 68 D3
!80C0 09 F1 C8 DB 08 C9 3E 00 C9 C3 5A 00 C3 DD 00 05
!80D0 01 09 D2 10 C0 21 E3 1D F9 AF 32 30 1E 21 1E 03
!80E0 01 5A 00 11 E3 1D ED B0 EB F9 CD 26 05 CD 19 0B
!80F0 32 84 1E 32 D3 1E 21 37 1F 23 7C B5 CA A2 00 7E
!8100 47 2F 77 BE 70 CA 7E 00 C3 A2 00 CD 1B 09 B7 C2
!8110 EB 03 EB 2B 3E D9 46 77 BE 70 C2 7B 00 2B 11 36
!8120 1F 7C 92 20 02 7D 93 DA 7B 00 11 CE FF 22 89 1E
!8130 19 22 34 1E CD 01 05 2A 34 1E 11 EF FF 19 11 D3
!8140 1E 7D 93 6F 7C 9A 67 E5 21 F5 00 CD 02 12 E1 CD
!8150 CF 18 21 E6 00 CD 02 12 31 40 1E CD 26 05 C3 39
!8160 04 20 42 79 74 65 73 20 66 72 65 65 0D 0A 00 00
!8170 5A 38 30 20 42 41 53 49 43 20 56 65 72 20 34 2E
!8180 37 63 0D 0A 43 6F 70 79 72 69 67 68 74 20 28 43
!8190 29 20 31 39 37 38 20 62 79 20 4D 69 63 72 6F 73
!81A0 6F 66 74 0D 0A 4D 6F 64 69 66 69 65 64 20 66 6F
!81B0 72 20 5A 38 43 20 62 79 20 44 65 6E 6E 69 73 20
!81C0 47 75 6E 69 61 0D 0A 00 00 4D 65 6D 6F 72 79 20
!81D0 74 6F 70 00 4E 17 04 18 64 17 E6 1D B0 10 5E 14
!81E0 DE 10 DC 19 D5 1A E4 15 37 1A 63 1B 69 1B CF 1B
!81F0 E9 1B B2 14 55 1C 8B 13 82 11 25 14 9A 13 AB 13
!8200 EE 1C 81 1D BB 13 EB 13 F5 13 C5 4E 44 C6 4F 52
!8210 CE 45 58 54 C4 41 54 41 C9 4E 50 55 54 C4 49 4D
!8220 D2 45 41 44 CC 45 54 C7 4F 54 4F D2 55 4E C9 46
!8230 D2 45 53 54 4F 52 45 C7 4F 53 55 42 D2 45 54 55
!8240 52 4E D2 45 4D D3 54 4F 50 CF 55 54 CF 4E CE 55
!8250 4C 4C D7 41 49 54 C4 45 46 D0 4F 4B 45 C4 4F 4B
!8260 45 CC 49 4E 45 53 C3 4C 53 D7 49 44 54 48 CD 4F
!8270 4E 49 54 4F 52 D2 45 53 45 54 D0 52 49 4E 54 C3
!8280 4F 4E 54 CC 49 53 54 C3 4C 45 41 52 C8 4C 4F 41
!8290 44 CE 45 57 D4 41 42 28 D4 4F C6 4E D3 50 43 28
!82A0 D4 48 45 4E CE 4F 54 D3 54 45 50 AB AD AA AF DE
!82B0 C1 4E 44 CF 52 BE BD BC D3 47 4E C9 4E 54 C1 42
!82C0 53 D5 53 52 C6 52 45 C9 4E 50 D0 4F 53 D3 51 52
!82D0 D2 4E 44 CC 4F 47 C5 58 50 C3 4F 53 D3 49 4E D4
!82E0 41 4E C1 54 4E D0 45 45 4B C4 45 45 4B CC 45 4E
!82F0 D3 54 52 24 D6 41 4C C1 53 43 C3 48 52 24 C8 45
!8300 58 24 C2 49 4E 24 CC 45 46 54 24 D2 49 47 48 54
!8310 24 CD 49 44 24 80 99 08 8D 07 9B 0C F0 09 9A 0B
!8320 F0 0E C9 0B 07 0A AA 09 8D 09 97 0A 5E 08 99 09
!8330 CB 09 F2 09 97 08 6A 14 79 0A D8 08 70 14 E6 10
!8340 B9 14 60 1C 46 1C 38 1C 3E 1C 35 1C 59 00 BB 0A
!8350 C5 08 04 07 44 09 77 1C 00 05 79 B6 18 79 D7 14
!8360 7C 23 16 7C 8E 16 7F ED 19 50 44 0E 46 43 0E 4E
!8370 46 53 4E 52 47 4F 44 46 43 4F 56 4F 4D 55 4C 42
!8380 53 44 44 2F 30 49 44 54 4D 4F 53 4C 53 53 54 43
!8390 4E 55 46 4D 4F 48 58 42 4E C3 DD 00 C3 16 09 D3
!83A0 00 C9 D6 00 6F 7C DE 00 67 78 DE 00 47 3E 00 C9
!83B0 00 00 00 35 4A CA 99 39 1C 76 98 22 95 B3 98 0A
!83C0 DD 47 98 53 D1 99 99 0A 1A 9F 98 65 BC CD 98 D6
!83D0 77 3E 98 52 C7 4F 80 DB 00 C9 01 FF 1C 00 00 14
!83E0 00 14 00 00 00 00 00 C3 39 06 37 1F FE FF D4 1E
!83F0 03 20 45 72 72 6F 72 00 20 69 6E 20 00 4F 6B 0D
!8400 0A 00 00 42 72 65 61 6B 00 21 04 00 39 7E 23 FE
!8410 81 C0 4E 23 46 23 E5 69 60 7A B3 EB CA AB 03 EB
!8420 7C 92 20 02 7D 93 01 0D 00 E1 C8 09 C3 92 03 CD
!8430 D1 03 C5 E3 C1 7C 92 20 02 7D 93 7E 02 C8 0B 2B
!8440 C3 BA 03 E5 2A B4 1E 06 00 09 09 3E E5 3E D0 95
!8450 6F 3E FF 9C DA E0 03 67 39 E1 D8 1E 0C C3 FF 03
!8460 2A A3 1E 22 36 1E 1E 02 01 1E 14 01 1E 00 01 1E
!8470 12 01 1E 22 01 1E 0A 01 1E 18 CD 26 05 32 28 1E
!8480 CD 0C 0B 21 F4 02 57 3E 3F CD C7 06 19 7E CD C7
!8490 06 CD 4F 08 CD C7 06 21 76 03 CD 02 12 2A 36 1E
!84A0 11 FE FF 7C 92 20 02 7D 93 CA 5A 00 7C A5 3C C4
!84B0 C7 18 3E C1 AF 32 28 1E CD 0C 0B 21 82 03 CD 02
!84C0 12 21 FF FF 22 36 1E CD 31 1E DA 46 04 CD 4F 08
!84D0 3C 3D CA 46 04 F5 CD 1B 09 D5 CD 50 05 47 D1 F1
!84E0 D2 2F 08 D5 C5 AF 32 A6 1E CD 4F 08 B7 F5 CD DD
!84F0 04 DA 7F 04 F1 F5 CA C6 09 B7 C5 D2 99 04 EB 2A
!8500 B0 1E 1A 02 03 13 7C 92 20 02 7D 93 C2 87 04 60
!8510 69 22 B0 1E D1 F1 CA C0 04 2A B0 1E E3 C1 09 E5
!8520 CD B4 03 E1 22 B0 1E EB 74 D1 23 23 73 23 72 23
!8530 11 3B 1E 1A 77 23 13 B7 C2 B8 04 CD 0C 05 23 EB
!8540 62 6B 7E 23 B6 CA 46 04 23 23 23 AF BE 23 C2 D1
!8550 04 EB 73 23 72 C3 C5 04 2A 38 1E 44 4D 7E 23 B6
!8560 2B C8 23 23 7E 23 66 6F 7C 92 20 02 7D 93 60 69
!8570 7E 23 66 6F 3F C8 3F D0 C3 E0 04 C0 2A 38 1E AF
!8580 77 23 77 23 22 B0 1E 2A 38 1E 2B 22 A8 1E 2A 89
!8590 1E 22 9D 1E AF CD 5E 08 2A B0 1E 22 B2 1E 22 B4
!85A0 1E C1 2A 34 1E F9 21 8D 1E 22 8B 1E AF 6F 67 22
!85B0 AE 1E 32 A5 1E 22 B8 1E E5 C5 2A A8 1E C9 3E 3F
!85C0 CD C7 06 3E 20 CD C7 06 C3 31 1E AF 32 88 1E 0E
!85D0 05 11 3B 1E 7E FE 20 CA D8 05 47 FE 22 CA F8 05
!85E0 B7 CA FF 05 3A 88 1E B7 7E C2 D8 05 FE 3F 3E 9C
!85F0 CA D8 05 7E FE 30 DA 83 05 FE 3C DA D8 05 D5 11
!8600 8E 01 C5 01 D4 05 C5 06 7F 7E FE 61 DA 9C 05 FE
!8610 7B D2 9C 05 E6 5F 77 4E EB 23 B6 F2 9E 05 04 7E
!8620 E6 7F C8 B9 C2 9E 05 EB E5 13 1A B7 FA D0 05 4F
!8630 78 FE 88 C2 BF 05 CD 4F 08 2B 23 7E FE 61 DA C8
!8640 05 E6 5F B9 CA AE 05 E1 C3 9C 05 48 F1 EB C9 EB
!8650 79 C1 D1 23 12 13 0C D6 3A CA E6 05 FE 49 C2 E9
!8660 05 32 88 1E D6 54 C2 59 05 47 7E B7 CA FF 05 B8
!8670 CA D8 05 23 12 0C 13 C3 EF 05 21 3A 1E 12 13 12
!8680 13 12 C9 3A 27 1E B7 3E 00 32 27 1E C2 1C 06 05
!8690 CA 31 1E CD C7 06 3E 05 2B CA 30 06 7E CD C7 06
!86A0 C3 42 06 05 2B CD C7 06 C2 42 06 CD C7 06 CD 19
!86B0 0B C3 31 1E 21 3B 1E 06 01 AF 32 27 1E CD F5 06
!86C0 4F FE 7F CA 08 06 3A 27 1E B7 CA 5B 06 3E 00 CD
!86D0 C7 06 AF 32 27 1E 79 FE 07 CA 9F 06 FE 03 CC 19
!86E0 0B 37 C8 FE 0D CA 14 0B FE 15 CA 33 06 FE 40 CA
!86F0 30 06 FE 5F CA 28 06 FE 08 CA 28 06 FE 12 C2 9A
!8700 06 C5 D5 E5 36 00 CD EF 06 21 3B 1E CD 02 12 E1
!8710 D1 C1 C3 42 06 FE 20 DA 42 06 78 FE 49 3E 07 D2
!8720 B4 06 79 71 32 A6 1E 23 04 CD C7 06 C3 42 06 CD
!8730 C7 06 3E 08 C3 AE 06 7E E3 BE 23 E3 CA 4F 08 C3
!8740 EB 03 F5 3A 28 1E B7 C2 3A 12 F1 C5 F5 FE 20 DA
!8750 EB 06 3A 25 1E 47 3A 85 1E 04 CA E7 06 05 B8 CC
!8760 19 0B 3C 32 85 1E F1 C1 CF C9 CD C7 06 C3 19 0B
!8770 D7 E6 7F FE 0F C0 3A 28 1E 2F 32 28 1E AF C9 CD
!8780 1B 09 C0 C1 CD DD 04 C5 CD 5A 07 E1 4E 23 46 23
!8790 78 B1 CA 39 04 CD 63 07 CD 79 08 C5 CD 19 0B 5E
!87A0 23 56 23 E5 EB CD CF 18 3E 20 E1 CD C7 06 7E B7
!87B0 23 CA 10 07 F2 30 07 D6 7F 4F 11 8F 01 1A 13 B7
!87C0 F2 42 07 0D C2 42 07 E6 7F CD C7 06 1A 13 B7 F2
!87D0 4C 07 C3 33 07 E5 2A 2B 1E 22 29 1E E1 C9 E5 D5
!87E0 2A 29 1E 11 FF FF ED 5A 22 29 1E D1 E1 F0 E5 2A
!87F0 2B 1E 22 29 1E D7 FE 03 CA 84 07 E1 C3 63 07 2A
!8800 2B 1E 22 29 1E C3 E0 00 3E 64 32 A5 1E CD 07 0A
!8810 C1 E5 CD F0 09 22 A1 1E 21 02 00 39 CD 92 03 D1
!8820 C2 C1 07 09 D5 2B 56 2B 5E 23 23 E5 2A A1 1E 7C
!8830 92 C2 BB 07 7D 93 E1 C2 A1 07 D1 F9 EB 0E 08 CD
!8840 C8 03 E5 2A A1 1E E3 E5 2A 36 1E E3 CD F9 0C CD
!8850 BC 06 A3 CD F6 0C ED 5B BE 1E ED 4B C0 1E C5 D5
!8860 01 00 81 51 5A 7E FE A8 3E 01 C2 03 08 CD 4F 08
!8870 CD F6 0C ED 5B BE 1E ED 4B C0 1E CD 3F 17 C5 D5
!8880 F5 33 E5 2A A8 1E E3 06 81 C5 33 CD 79 08 22 A8
!8890 1E 7E FE 3A CA 2F 08 B7 C2 EB 03 23 7E 23 B6 CA
!88A0 A1 08 23 5E 23 56 ED 53 36 1E CD 4F 08 11 10 08
!88B0 D5 C8 D6 80 DA 07 0A FE 22 D2 EB 03 07 4F 06 00
!88C0 EB 21 9B 02 09 4E 23 46 C5 EB 23 7E FE 3A D0 FE
!88D0 20 28 F7 FE 30 3F 3C 3D C9 EB 2A 38 1E CA 73 08
!88E0 EB CD 1B 09 E5 CD DD 04 60 69 D1 D2 C6 09 2B 22
!88F0 B6 1E EB C9 DF B7 C8 D7 FE 1B 28 11 FE 03 28 0D
!8900 FE 13 C0 D7 FE 11 C8 FE 03 28 07 18 F6 3E FF 32
!8910 30 1E C0 F6 C0 22 A8 1E 21 F6 FF C1 2A 36 1E F5
!8920 7D A4 3C CA B4 08 22 AC 1E 2A A8 1E 22 AE 1E AF
!8930 32 28 1E CD 0C 0B F1 21 88 03 C2 1F 04 C3 39 04
!8940 2A AE 1E 7C B5 1E 20 CA FF 03 EB 2A AC 1E 22 36
!8950 1E EB C9 CD A1 14 C0 32 24 1E C9 E5 2A 2D 1E 06
!8960 00 4F 09 22 2D 1E E1 C9 7E FE 41 D8 FE 5B 3F C9
!8970 CD 4F 08 CD F6 0C CD 3F 17 FA 16 09 3A C1 1E FE
!8980 90 DA D4 17 01 80 90 11 00 00 E5 CD A7 17 E1 51
!8990 C8 1E 08 C3 FF 03 2B 11 00 00 CD 4F 08 D0 E5 F5
!89A0 21 98 19 7C 92 C2 2F 09 7D 93 DA EB 03 62 6B 19
!89B0 29 19 29 F1 D6 30 5F 16 00 19 EB E1 C3 1F 09 CA
!89C0 10 05 CD F8 08 2B CD 4F 08 E5 2A 89 1E CA 67 09
!89D0 E1 CD BC 06 2C D5 CD F8 08 2B CD 4F 08 C2 EB 03
!89E0 E3 EB 7D 93 5F 7C 9A 57 DA E0 03 E5 2A B0 1E 01
!89F0 28 00 09 7C 92 20 02 7D 93 D2 E0 03 EB 22 34 1E
!8A00 E1 22 89 1E E1 C3 10 05 CA 0C 05 CD 10 05 01 10
!8A10 08 C3 A9 09 0E 03 CD C8 03 C1 E5 E5 2A 36 1E E3
!8A20 3E 8C F5 33 C5 CD 1B 09 CD F2 09 E5 2A 36 1E 7C
!8A30 92 20 02 7D 93 E1 23 DC E0 04 D4 DD 04 60 69 2B
!8A40 D8 1E 0E C3 FF 03 C0 16 FF CD 8E 03 F9 FE 8C 1E
!8A50 04 C2 FF 03 E1 22 36 1E 23 7C B5 C2 EA 09 3A A6
!8A60 1E B7 C2 38 04 21 10 08 E3 3E E1 01 3A 0E 00 06
!8A70 00 79 48 47 7E B7 C8 B8 C8 23 FE 22 CA F6 09 C3
!8A80 F9 09 CD F5 0E CD BC 06 B1 D5 3A 87 1E F5 CD 08
!8A90 0D F1 E3 22 A8 1E 1F CD FB 0C CA 69 0A E5 2A BE
!8AA0 1E E5 23 23 5E 23 56 2A 38 1E 7C 92 20 02 7D 93
!8AB0 D2 52 0A 2A 34 1E 7C 92 20 02 7D 93 D1 D2 5A 0A
!8AC0 21 99 1E 7C 92 20 02 7D 93 D2 5A 0A 3E D1 CD 77
!8AD0 13 EB CD 92 11 CD 77 13 E1 EB ED A0 ED A0 ED A0
!8AE0 ED A0 E1 C9 E5 11 BE 1E EB ED A0 ED A0 ED A0 ED
!8AF0 A0 D1 E1 C9 CD A1 14 7E 47 FE 8C CA 88 0A CD BC
!8B00 06 88 2B 4B 0D 78 CA 37 08 CD 1C 09 FE 2C C0 C3
!8B10 89 0A CD 08 0D 7E FE 88 CA A5 0A CD BC 06 A6 2B
!8B20 CD F9 0C CD 3F 17 CA F2 09 CD 4F 08 DA AA 09 C3
!8B30 36 08 2B CD 4F 08 CA 19 0B C8 FE A2 CA 4C 0B FE
!8B40 A5 CA 4C 0B E5 FE 2C CA 35 0B FE 3B CA 6F 0B C1
!8B50 CD 08 0D E5 3A 87 1E B7 C2 05 0B CD DA 18 CD B6
!8B60 11 36 20 2A BE 1E 34 2A BE 1E 3A 25 1E 47 04 CA
!8B70 01 0B 04 3A 85 1E 86 3D B8 D4 19 0B CD 05 12 AF
!8B80 C4 05 12 E1 C3 B7 0A 3A 85 1E B7 C8 C3 19 0B 36
!8B90 00 21 3A 1E 3E 0D CD C7 06 3E 0A CD C7 06 AF 32
!8BA0 85 1E 3A 24 1E 3D C8 F5 AF CD C7 06 F1 C3 2A 0B
!8BB0 3A 26 1E 47 3A 85 1E B8 D4 19 0B D2 6F 0B D6 0E
!8BC0 D2 43 0B 2F C3 64 0B F5 CD 9E 14 CD BC 06 29 2B
!8BD0 F1 D6 A5 E5 CA 5F 0B 3A 85 1E 2F 83 D2 6F 0B 3C
!8BE0 47 3E 20 CD C7 06 05 C2 68 0B E1 CD 4F 08 C3 BE
!8BF0 0A 3F 52 65 64 6F 20 66 72 6F 6D 20 73 74 61 72
!8C00 74 0D 0A 00 3A A7 1E B7 C2 E5 03 C1 21 76 0B CD
!8C10 02 12 C3 3F 05 CD 63 11 7E FE 22 3E 00 32 28 1E
!8C20 C2 B4 0B CD B7 11 CD BC 06 3B E5 CD 05 12 3E E5
!8C30 CD 43 05 C1 DA 9E 08 23 7E B7 2B C5 CA EF 09 36
!8C40 2C C3 CE 0B E5 2A B6 1E F6 AF 32 A7 1E E3 C3 DA
!8C50 0B CD BC 06 2C CD F5 0E E3 D5 7E FE 2C CA 02 0C
!8C60 3A A7 1E B7 C2 78 0C 3E 3F CD C7 06 CD 43 05 D1
!8C70 C1 DA 9E 08 23 7E B7 2B C5 CA EF 09 D5 3A 87 1E
!8C80 B7 CA 2C 0C CD 4F 08 57 47 FE 22 CA 20 0C 3A A7
!8C90 1E B7 57 CA 1D 0C 16 3A 06 2C 2B CD BA 11 EB 21
!8CA0 40 0C E3 D5 C3 22 0A CD 4F 08 CD 37 18 E3 11 BE
!8CB0 1E EB ED A0 ED A0 ED A0 ED A0 E1 2B CD 4F 08 CA
!8CC0 4C 0C FE 2C C2 89 0B E3 2B CD 4F 08 C2 D6 0B D1
!8CD0 3A A7 1E B7 EB C2 74 08 D5 B6 21 67 0C C4 02 12
!8CE0 E1 C9 3F 45 78 74 72 61 20 69 67 6E 6F 72 65 64
!8CF0 0D 0A 00 CD F0 09 B7 C2 90 0C 23 7E 23 B6 1E 06
!8D00 CA FF 03 23 5E 23 56 ED 53 A3 1E CD 4F 08 FE 83
!8D10 C2 78 0C C3 02 0C 11 00 00 C4 F5 0E 22 A8 1E CD
!8D20 8E 03 C2 F1 03 F9 D5 7E 23 F5 D5 11 BE 1E ED A0
!8D30 ED A0 ED A0 ED A0 E3 E5 CD CD 14 D1 21 BE 1E ED
!8D40 A0 ED A0 ED A0 ED A0 E1 CD 89 17 E5 CD A7 17 E1
!8D50 C1 90 CD 89 17 CA E6 0C EB 22 36 1E 69 60 C3 0C
!8D60 08 F9 2A A8 1E 7E FE 2C C2 10 08 CD 4F 08 CD 9E
!8D70 0C CD 08 0D F6 37 3A 87 1E 8F B7 E8 C3 FD 03 CD
!8D80 BC 06 28 2B 16 00 D5 0E 01 CD C8 03 CD 82 0D 22
!8D90 AA 1E 2A AA 1E C1 78 FE 78 D4 F9 0C 7E 16 00 D6
!8DA0 B0 DA 40 0D FE 03 D2 40 0D FE 01 17 AA BA 57 DA
!8DB0 EB 03 22 9F 1E CD 4F 08 C3 24 0D 7A B7 C2 70 0E
!8DC0 7E 22 9F 1E D6 A9 D8 FE 07 D0 5F 3A 87 1E 3D B3
!8DD0 7B CA 09 13 07 83 5F 21 DF 02 19 78 56 BA D0 23
!8DE0 CD F9 0C C5 01 17 0D C5 ED 4B BE 1E C5 ED 4B C0
!8DF0 1E C5 4E 23 46 23 C5 2A 9F 1E C3 0B 0D AF 32 87
!8E00 1E CD 4F 08 1E 24 CA FF 03 DA 37 18 CD ED 08 D2
!8E10 EA 0D FE A9 CA 82 0D FE 2E CA 37 18 FE AA CA D9
!8E20 0D FE 22 CA B7 11 FE A7 CA D0 0E FE A4 CA 13 11
!8E30 FE 26 C2 CC 0D CD 4F 08 FE 48 CA 43 1D FE 42 CA
!8E40 B3 1D 1E 02 CA FF 03 D6 B3 D2 FB 0D CD 04 0D CD
!8E50 BC 06 29 C9 16 7D CD 0B 0D 2A AA 1E E5 CD 68 17
!8E60 CD F9 0C E1 C9 CD F5 0E E5 EB 22 BE 1E 3A 87 1E
!8E70 B7 CC 7D 17 E1 C9 06 00 07 4F C5 CD 4F 08 79 FE
!8E80 2F DA 22 0E CD 04 0D CD BC 06 2C CD FA 0C EB 2A
!8E90 BE 1E E3 E5 EB CD A1 14 EB E3 C3 2A 0E CD D1 0D
!8EA0 E3 11 E5 0D D5 01 59 01 09 4E 23 66 69 E9 15 FE
!8EB0 AA C8 FE 2D C8 14 FE 2B C8 FE A9 C8 2B C9 F6 AF
!8EC0 F5 CD F9 0C CD 01 09 F1 EB C1 E3 EB ED 53 BE 1E
!8ED0 ED 43 C0 1E F5 CD 01 09 F1 C1 79 21 D1 10 C2 6B
!8EE0 0E A3 4F 78 A2 E9 B3 4F 78 B2 E9 21 82 0E 3A 87
!8EF0 1E 1F 7A 17 5F 16 64 78 BA D0 C3 68 0D 84 0E 79
!8F00 B7 1F C1 D1 F5 CD FB 0C 21 C6 0E E5 CA A7 17 AF
!8F10 32 87 1E D5 CD 56 13 7E 23 23 4E 23 46 D1 C5 F5
!8F20 CD 5A 13 CD 89 17 F1 57 E1 7B B2 C8 7A D6 01 D8
!8F30 AF BB 3C D0 15 1D 0A BE 23 03 CA AE 0E 3F C3 4A
!8F40 17 3C 8F C1 A0 C6 FF 9F C3 51 17 16 5A CD 0B 0D
!8F50 CD F9 0C CD 01 09 7B 2F 4F 7A 2F CD D1 10 C1 C3
!8F60 17 0D 2B CD 4F 08 C8 CD BC 06 2C 01 E7 0E C5 F6
!8F70 AF 32 86 1E 46 CD ED 08 DA EB 03 AF 4F 32 87 1E
!8F80 CD 4F 08 DA 11 0F CD ED 08 DA 1E 0F 4F CD 4F 08
!8F90 DA 12 0F CD ED 08 D2 12 0F D6 24 C2 2D 0F 3C 32
!8FA0 87 1E 0F 81 4F CD 4F 08 3A A5 1E 3D CA E8 0F F2
!8FB0 3D 0F 7E D6 28 CA C0 0F AF 32 A5 1E E5 50 59 2A
!8FC0 B8 1E 7C 92 C2 4E 0F 7D 93 11 BA 1E CA 75 13 2A
!8FD0 B2 1E EB 2A B0 1E 7C 92 C2 62 0F 7D 93 CA 78 0F
!8FE0 79 96 23 C2 6D 0F 78 96 23 CA B2 0F 23 23 23 23
!8FF0 C3 5B 0F E1 E3 D5 11 ED 0D 7C 92 20 02 7D 93 D1
!9000 CA B5 0F E3 E5 C5 01 06 00 2A B4 1E E5 09 C1 E5
!9010 CD B4 03 E1 22 B4 1E 60 69 22 B2 1E 2B 36 00 7C
!9020 92 20 02 7D 93 C2 A1 0F D1 73 23 72 23 EB E1 C9
!9030 32 C1 1E 21 81 03 22 BE 1E E1 C9 E5 2A 86 1E E3
!9040 57 D5 C5 CD F5 08 C1 F1 EB E3 E5 EB 3C 57 7E FE
!9050 2C CA C6 0F CD BC 06 29 22 AA 1E E1 22 86 1E 1E
!9060 00 D5 11 E5 F5 2A B2 1E 3E 19 ED 5B B4 1E 7C 92
!9070 C2 FA 0F 7D 93 CA 23 10 7E B9 23 C2 05 10 7E B8
!9080 23 5E 23 56 23 C2 EE 0F 3A 86 1E B7 C2 F4 03 F1
!9090 44 4D CA 75 13 96 CA 84 10 1E 10 C3 FF 03 11 04
!90A0 00 F1 CA 16 09 71 23 70 23 4F CD C8 03 23 23 22
!90B0 9F 1E 71 23 3A 86 1E 17 79 01 0B 00 D2 46 10 C1
!90C0 03 71 23 70 23 F5 E5 CD 1D 18 EB E1 F1 3D C2 3E
!90D0 10 F5 42 4B EB 19 DA E0 03 CD D1 03 22 B4 1E 2B
!90E0 36 00 7C 92 20 02 7D 93 C2 64 10 03 57 2A 9F 1E
!90F0 5E EB 29 09 EB 2B 2B 73 23 72 23 F1 DA AC 10 47
!9100 4F 7E 23 16 E1 5E 23 56 23 E3 F5 7C 92 C2 97 10
!9110 7D 93 D2 1E 10 E5 CD 1D 18 D1 19 F1 3D 44 4D C2
!9120 89 10 29 29 C1 09 EB 2A AA 1E C9 2A B4 1E EB 21
!9130 00 00 39 3A 87 1E B7 CA CC 10 CD 56 13 CD 48 12
!9140 2A 34 1E EB 2A 9D 1E 7D 93 4F 7C 9A 41 50 1E 00
!9150 21 87 1E 73 06 90 C3 56 17 3A 85 1E 47 AF C3 D2
!9160 10 CD 71 11 CD 63 11 01 F0 09 C5 D5 CD BC 06 28
!9170 CD F5 0E E5 EB 2B 56 2B 5E E1 CD F9 0C CD BC 06
!9180 29 CD BC 06 B1 44 4D E3 71 23 70 C3 B0 11 CD 71
!9190 11 D5 CD D1 0D CD F9 0C E3 5E 23 56 23 7A B3 CA
!91A0 F7 03 7E 23 66 6F E5 2A B8 1E E3 22 B8 1E 2A BC
!91B0 1E E5 2A BA 1E E5 D5 11 BA 1E 21 BE 1E ED A0 ED
!91C0 A0 ED A0 ED A0 E1 CD F6 0C 2B CD 4F 08 C2 EB 03
!91D0 E1 22 BA 1E E1 22 BC 1E E1 22 B8 1E E1 C9 E5 2A
!91E0 36 1E 23 7C B5 E1 C0 1E 16 C3 FF 03 CD BC 06 A4
!91F0 3E 80 32 A5 1E B6 47 CD FA 0E C3 F9 0C CD F9 0C
!9200 CD DA 18 CD B6 11 CD 56 13 01 B7 13 C5 7E 23 23
!9210 E5 CD 1B 12 E1 4E 23 46 CD AA 11 E5 6F CD 49 13
!9220 D1 C9 CD 1B 12 21 99 1E E5 77 23 23 73 23 72 E1
!9230 C9 2B 06 22 50 E5 0E FF 23 7E 0C B7 CA CC 11 BA
!9240 CA CC 11 B8 C2 BD 11 FE 22 CC 4F 08 E3 23 EB 79
!9250 CD AA 11 11 99 1E 2A 8B 1E 22 BE 1E 3E 01 32 87
!9260 1E EB ED A0 ED A0 ED A0 ED A0 EB 7C 92 20 02 7D
!9270 93 22 8B 1E E1 7E C0 1E 1E C3 FF 03 23 CD B6 11
!9280 CD 56 13 CD 89 17 1C 1D C8 0A CD C7 06 FE 0D CC
!9290 23 0B 03 C3 0C 12 B7 0E F1 F5 2A 34 1E EB 2A 9D
!92A0 1E 2F 4F 06 FF 09 23 7C 92 20 02 7D 93 DA 3C 12
!92B0 22 9D 1E 23 EB F1 C9 F1 1E 1A CA FF 03 BF F5 01
!92C0 1D 12 C5 2A 89 1E 22 9D 1E 21 00 00 E5 2A 34 1E
!92D0 E5 21 8D 1E ED 5B 8B 1E 7C 92 20 02 7D 93 01 59
!92E0 12 C2 B5 12 2A B0 1E ED 5B B2 1E 7C 92 20 02 7D
!92F0 93 CA 84 12 7E 23 23 B7 CD B8 12 C3 6C 12 C1 ED
!9300 5B B4 1E 7C 92 20 02 7D 93 CA E4 12 CD 89 17 7B
!9310 E5 09 B7 F2 83 12 22 9F 1E E1 4E 06 00 09 09 23
!9320 ED 5B 9F 1E 7C 92 20 02 7D 93 CA 84 12 01 A5 12
!9330 C5 F6 80 7E 23 23 5E 23 56 23 F0 B7 C8 44 4D 2A
!9340 9D 1E 7C 92 20 02 7D 93 60 69 D8 E1 E3 7C 92 20
!9350 02 7D 93 E3 E5 60 69 D0 C1 F1 F1 E5 D5 C5 C9 D1
!9360 E1 7D B4 C8 2B 46 2B 4E E5 2B 2B 6E 26 00 09 50
!9370 59 2B 44 4D 2A 9D 1E CD B7 03 E1 71 23 70 69 60
!9380 2B C3 4B 12 C5 E5 2A BE 1E E3 CD 82 0D E3 CD FA
!9390 0C 7E E5 2A BE 1E E5 86 1E 1C DA FF 03 CD A7 11
!93A0 D1 CD 5A 13 E3 CD 59 13 E5 2A 9B 1E EB CD 40 13
!93B0 CD 40 13 21 14 0D E3 E5 C3 D8 11 E1 E3 7E 23 23
!93C0 4E 23 46 6F 2C 2D C8 0A 12 03 13 C3 4A 13 CD FA
!93D0 0C 2A BE 1E EB CD 77 13 EB C0 D5 50 59 1B 4E 2A
!93E0 9D 1E 7C 92 20 02 7D 93 C2 75 13 47 09 22 9D 1E
!93F0 E1 C9 2A 8B 1E 2B 46 2B 4E 2B 2B 7C 92 20 02 7D
!9400 93 C0 22 8B 1E C9 01 E1 10 C5 CD 53 13 AF 57 32
!9410 87 1E 7E B7 C9 01 E1 10 C5 CD 8F 13 CA 16 09 23
!9420 23 5E 23 56 1A C9 3E 01 CD A7 11 CD A4 14 2A 9B
!9430 1E 73 C1 C3 D8 11 CD 54 14 AF E3 4F E5 7E B8 DA
!9440 C9 13 78 11 0E 00 C5 CD 1B 12 C1 E1 E5 23 23 46
!9450 23 66 68 06 00 09 44 4D CD AA 11 6F CD 49 13 D1
!9460 CD 5A 13 C3 D8 11 CD 54 14 D1 D5 1A 90 C3 BF 13
!9470 EB 7E CD 59 14 04 05 CA 16 09 C5 1E FF FE 29 CA
!9480 0E 14 CD BC 06 2C CD A1 14 CD BC 06 29 F1 E3 01
!9490 C1 13 C5 3D BE 06 00 D0 4F 7E 91 BB 47 D8 43 C9
!94A0 CD 8F 13 CA 4A 15 5F 23 23 7E 23 66 6F E5 19 46
!94B0 72 E3 C5 7E FE 24 C2 43 14 CD 43 1D 18 0D FE 25
!94C0 C2 4D 14 CD B3 1D 18 03 CD 37 18 C1 E1 70 C9 EB
!94D0 CD BC 06 29 C1 D1 C5 43 C9 CD A4 14 32 22 1E CD
!94E0 21 1E C3 E1 10 CD 8E 14 C3 E9 1D CD 8E 14 F5 1E
!94F0 00 2B CD 4F 08 CA 84 14 CD BC 06 2C CD A1 14 C1
!9500 CD 21 1E AB A0 CA 85 14 C9 CD A1 14 32 22 1E 32
!9510 EA 1D CD BC 06 2C C3 A1 14 CD 4F 08 CD F6 0C CD
!9520 FB 08 7A B7 C2 16 09 2B CD 4F 08 7B C9 CD 01 09
!9530 1A C3 E1 10 CD F6 0C CD 01 09 D5 CD BC 06 2C CD
!9540 A1 14 D1 12 C9 21 C1 19 CD 89 17 C3 DC 14 CD 89
!9550 17 21 C1 D1 CD 68 17 78 B7 C8 3A C1 1E B7 CA 79
!9560 15 90 D2 FE 14 2F 3C 2A BE 1E E5 2A C0 1E E5 ED
!9570 53 BE 1E ED 43 C0 1E C1 D1 FE 19 D0 F5 CD 92 17
!9580 67 F1 CD AF 15 B4 21 BE 1E F2 24 15 CD 8F 15 D2
!9590 6A 15 23 34 CA FA 03 2E 01 CD C5 15 C3 6A 15 AF
!95A0 90 47 7E 9B 5F 23 7E 9A 57 23 7E 99 4F DC 9B 15
!95B0 68 63 AF 47 79 B7 C2 57 15 4A 54 65 6F 78 D6 08
!95C0 FE E0 C2 38 15 AF 32 C1 1E C9 05 29 7A 17 57 79
!95D0 8F 4F F2 4F 15 78 5C 45 B7 CA 6A 15 21 C1 1E 86
!95E0 77 D2 4A 15 C8 78 21 C1 1E B7 FC 82 15 46 23 7E
!95F0 E6 80 A9 4F ED 53 BE 1E ED 43 C0 1E C9 1C C0 14
!9600 C0 0C C0 0E 80 34 C0 C3 FA 03 7E 83 5F 23 7E 8A
!9610 57 23 7E 89 4F C9 21 C2 1E 7E 2F 77 AF 6F 90 47
!9620 7D 9B 5F 7D 9A 57 7D 99 4F C9 06 00 D6 08 DA BE
!9630 15 43 5A 51 0E 00 C3 B1 15 C6 09 6F AF 2D C8 79
!9640 1F 4F 7A 1F 57 7B 1F 5F 78 1F 47 C3 C1 15 00 00
!9650 00 81 03 AA 56 19 80 F1 22 76 80 45 AA 38 82 CD
!9660 3F 17 B7 EA 16 09 21 C1 1E 7E 01 35 80 11 F3 04
!9670 90 F5 70 D5 C5 CD DC 14 C1 D1 04 CD 90 16 21 D3
!9680 15 CD D3 14 21 D7 15 CD 98 1A 01 80 80 11 00 00
!9690 CD DC 14 F1 CD AB 18 01 31 80 11 18 72 21 C1 D1
!96A0 CD 3F 17 C8 2E 00 CD F8 16 79 32 D0 1E EB 22 D1
!96B0 1E 01 00 00 50 58 21 35 15 E5 21 47 16 E5 E5 21
!96C0 BE 1E 7E 23 B7 CA 73 16 E5 2E 08 1F 67 79 D2 61
!96D0 16 E5 2A D1 1E 19 EB E1 3A D0 1E 89 1F 4F 7A 1F
!96E0 57 7B 1F 5F 78 1F 47 2D 7C C2 50 16 E1 C9 43 5A
!96F0 51 4F C9 2A BE 1E E5 2A C0 1E E5 01 20 84 11 00
!9700 00 ED 53 BE 1E ED 43 C0 1E C1 D1 CD 3F 17 CA EE
!9710 03 2E FF CD F8 16 34 34 2B 7E 32 F5 1D 2B 7E 32
!9720 F1 1D 2B 7E 32 ED 1D 41 EB AF 4F 57 5F 32 F8 1D
!9730 E5 C5 7D CD EC 1D DE 00 3F D2 C8 16 32 F8 1D F1
!9740 F1 37 D2 C1 E1 79 3C 3D 1F FA 6B 15 17 7B 17 5F
!9750 7A 17 57 79 17 4F 29 78 17 47 3A F8 1D 17 32 F8
!9760 1D 79 B2 B3 C2 B5 16 E5 21 C1 1E 35 E1 C2 B5 16
!9770 C3 FA 03 78 B7 CA 1C 17 7D 21 C1 1E AE 80 47 1F
!9780 A8 78 F2 1B 17 C6 80 77 CA 75 13 CD 92 17 77 2B
!9790 C9 CD 3F 17 2F E1 B7 E1 F2 4A 15 C3 FA 03 ED 5B
!97A0 BE 1E ED 4B C0 1E 78 B7 C8 C6 02 DA FA 03 47 CD
!97B0 DC 14 21 C1 1E 34 C0 C3 FA 03 3A C1 1E B7 C8 3A
!97C0 C0 1E FE 2F 17 9F C0 3C C9 CD 3F 17 06 88 11 00
!97D0 00 21 C1 1E 4F 70 06 00 23 36 80 17 C3 32 15 CD
!97E0 3F 17 F0 21 C0 1E 7E EE 80 77 C9 EB 2A BE 1E E3
!97F0 E5 2A C0 1E E3 E5 EB C9 11 BE 1E ED A0 ED A0 ED
!9800 A0 ED A0 C9 5E 23 56 23 4E 23 46 23 C9 21 C0 1E
!9810 7E 07 37 1F 77 3F 1F 23 23 77 79 07 37 1F 4F 1F
!9820 AE C9 78 B7 CA 3F 17 21 48 17 E5 CD 3F 17 79 C8
!9830 21 C0 1E AE 79 F8 CD C1 17 1F A9 C9 23 78 BE C0
!9840 2B 79 BE C0 2B 7A BE C0 2B 7B 96 C0 E1 E1 C9 47
!9850 4F 57 5F B7 C8 E5 ED 5B BE 1E ED 4B C0 1E CD 92
!9860 17 AE 67 FC FD 17 3E 98 90 CD AF 15 7C 17 DC 82
!9870 15 06 00 DC 9B 15 E1 C9 1B 7A A3 3C C0 0B C9 21
!9880 C1 1E 7E FE 98 3A BE 1E D0 7E CD D4 17 36 98 7B
!9890 F5 79 17 CD 32 15 F1 C9 21 00 00 78 B1 C8 78 06
!98A0 10 29 DA 1E 10 CB 11 17 D2 34 18 19 DA 1E 10 10
!98B0 F0 C9 FE 2D F5 CA 43 18 FE 2B CA 43 18 2B CD 4A
!98C0 15 47 57 5F 2F 4F CD 4F 08 DA 94 18 FE 2E CA 6F
!98D0 18 FE 45 C2 73 18 CD 4F 08 CD 33 0E CD 4F 08 DA
!98E0 BB 18 14 C2 73 18 AF 93 5F 0C 0C CA 4B 18 E5 7B
!98F0 90 F4 8C 18 F2 82 18 F5 CD 78 16 F1 3C C2 76 18
!9900 D1 F1 CC 68 17 EB C9 C8 F5 CD 23 17 F1 3D C9 D5
!9910 57 78 89 47 C5 E5 D5 CD 23 17 F1 D6 30 CD AB 18
!9920 E1 C1 D1 C3 4B 18 2A BE 1E E5 2A C0 1E E5 CD 51
!9930 17 C1 D1 C3 DC 14 7B 07 07 83 07 86 D6 30 5F C3
!9940 61 18 E5 21 7D 03 CD 02 12 E1 EB AF 06 98 CD 56
!9950 17 21 01 12 E5 21 C3 1E E5 CD 3F 17 36 20 F2 E8
!9960 18 36 2D 23 36 30 CA AC 19 E5 FC 68 17 AF F5 CD
!9970 B2 19 01 43 91 11 F8 4F CD A7 17 B7 E2 15 19 F1
!9980 CD 8D 18 F5 C3 F7 18 CD 78 16 F1 3C F5 CD B2 19
!9990 CD CA 14 3C CD D4 17 ED 53 BE 1E ED 43 C0 1E 01
!99A0 06 03 F1 81 3C FA 36 19 FE 08 D2 36 19 3C 47 3E
!99B0 02 3D 3D E1 F5 11 C5 19 05 C2 47 19 36 2E 23 36
!99C0 30 23 05 36 2E CC 90 17 C5 E5 EB ED 5B BE 1E ED
!99D0 4B C0 1E 06 2F 04 7B 96 5F 23 7A 9E 57 23 79 9E
!99E0 4F 2B 2B D2 5A 19 CD 8F 15 23 ED 53 BE 1E ED 43
!99F0 C0 1E EB E1 70 23 C1 0D C2 47 19 05 CA 90 19 2B
!9A00 7E FE 30 CA 84 19 FE 2E C4 90 17 F1 CA AF 19 36
!9A10 45 23 36 2B F2 A0 19 36 2D 2F 3C 06 2F 04 D6 0A
!9A20 D2 A2 19 C6 3A 23 70 23 77 23 71 E1 C9 01 74 94
!9A30 11 F7 23 CD A7 17 B7 E1 E2 0C 19 E9 00 00 00 80
!9A40 A0 86 01 10 27 00 E8 03 00 64 00 00 0A 00 00 01
!9A50 00 00 21 68 17 E3 E9 CD 70 17 21 C1 19 11 BE 1E
!9A60 ED A0 ED A0 ED A0 ED A0 C1 D1 CD 3F 17 78 CA 37
!9A70 1A F2 FD 19 B7 CA EE 03 B7 CA 4B 15 D5 C5 79 F6
!9A80 7F ED 5B BE 1E ED 4B C0 1E F2 1F 1A D5 C5 CD 04
!9A90 18 C1 D1 F5 CD A7 17 E1 7C 1F E1 22 C0 1E E1 22
!9AA0 BE 1E DC D7 19 CC 68 17 D5 C5 CD E4 15 C1 D1 CD
!9AB0 25 16 CD 70 17 01 38 81 11 3B AA CD 25 16 3A C1
!9AC0 1E FE 88 D2 16 17 CD 04 18 C6 80 C6 02 DA 16 17
!9AD0 F5 21 D3 15 CD CD 14 CD 1C 16 F1 C1 D1 F5 CD D9
!9AE0 14 CD 68 17 21 77 1A CD AC 1A 11 00 00 C1 4A C3
!9AF0 25 16 08 40 2E 94 74 70 4F 2E 77 6E 02 88 7A E6
!9B00 A0 2A 7C 50 AA AA 7E FF FF 7F 7F 00 00 80 81 00
!9B10 00 00 81 CD 70 17 11 23 16 D5 E5 ED 5B BE 1E ED
!9B20 4B C0 1E CD 25 16 E1 CD 70 17 7E 23 11 BE 1E ED
!9B30 A0 ED A0 ED A0 ED A0 06 F1 C1 D1 3D C8 D5 C5 F5
!9B40 E5 CD 25 16 E1 CD 89 17 E5 CD DC 14 E1 C3 BD 1A
!9B50 CD 3F 17 21 FC 1D FA 4F 1B 21 1D 1E 11 BE 1E ED
!9B60 A0 ED A0 ED A0 ED A0 21 FC 1D C8 86 E6 07 06 00
!9B70 77 23 87 87 4F 09 CD 89 17 CD 25 16 3A FB 1D 3C
!9B80 E6 03 06 00 FE 01 88 32 FB 1D 21 53 1B 87 87 4F
!9B90 09 CD CD 14 ED 5B BE 1E ED 4B C0 1E 7B 59 EE 4F
!9BA0 4F 21 C2 1E 36 80 2B 46 36 80 21 FA 1D 34 7E D6
!9BB0 AB C2 3D 1B 77 0C 15 1C CD 35 15 11 1D 1E 21 BE
!9BC0 1E ED A0 ED A0 ED A0 ED A0 C9 77 2B 77 2B 77 C3
!9BD0 19 1B 68 B1 46 68 99 E9 92 69 10 D1 75 68 21 B2
!9BE0 1B CD CD 14 CD 70 17 01 49 83 11 DB 0F ED 53 BE
!9BF0 1E ED 43 C0 1E C1 D1 CD 90 16 CD 70 17 CD 04 18
!9C00 C1 D1 CD D9 14 21 B6 1B CD D3 14 CD 3F 17 37 F2
!9C10 9E 1B CD CA 14 CD 3F 17 B7 F5 F4 68 17 21 B6 1B
!9C20 CD CD 14 F1 D4 68 17 21 BA 1B C3 98 1A DB 0F 49
!9C30 81 00 00 00 7F 05 BA D7 1E 86 64 26 99 87 58 34
!9C40 23 87 E0 5D A5 86 DA 0F 49 83 CD 70 17 CD 69 1B
!9C50 C1 E1 CD 70 17 EB ED 53 BE 1E ED 43 C0 1E CD 63
!9C60 1B C3 8E 16 CD 3F 17 FC D7 19 FC 68 17 3A C1 1E
!9C70 FE 81 DA 06 1C 01 00 81 51 59 CD 90 16 21 D3 14
!9C80 E5 21 10 1C CD 98 1A 21 B2 1B C9 09 4A D7 3B 78
!9C90 02 6E 84 7B FE C1 2F 7C 74 31 9A 7D 84 3D 5A 7D
!9CA0 C8 7F 91 7E E4 BB 4C 7E 6C AA AA 7F 00 00 00 81
!9CB0 C3 00 00 3E 0C CF C9 ED 45 CD A1 14 7B 32 25 1E
!9CC0 C9 CD F6 0C CD 01 09 ED 53 29 1E ED 53 2B 1E C9
!9CD0 CD 01 09 D5 E1 46 23 7E C3 D2 10 CD F6 0C CD 01
!9CE0 09 D5 CD BC 06 2C CD F6 0C CD 01 09 E3 73 23 72
!9CF0 E1 C9 C0 CD 96 1C 1B 2A 89 1E AF ED 52 38 0B ED
!9D00 53 89 1E 21 CE FF 19 22 34 1E 13 ED 53 E7 1D 18
!9D10 21 D7 FE 3A 20 FB 0E 00 CD D4 1C 47 CD D4 1C 57
!9D20 CD D4 1C 5F CD D4 1C 3D 28 1A 3C C2 FD 03 C9 CD
!9D30 96 1C CD D4 1C 12 13 10 F9 CD D4 1C 79 B7 C2 7C
!9D40 1D C3 B4 1C CD D4 1C 79 B7 C2 7C 1D C3 E0 00 CD
!9D50 E5 1C 07 07 07 07 6F CD E5 1C B5 6F 81 4F 7D C9
!9D60 D7 D6 30 FE 0A D8 D6 07 C9 CD F9 0C CD 01 09 C5
!9D70 21 C3 1E 7A FE 00 28 0C CD 26 1D 78 FE 30 28 02
!9D80 70 23 71 23 7B CD 26 1D 7A FE 00 20 05 78 FE 30
!9D90 28 02 70 23 71 23 AF 77 23 77 C1 21 C3 1E C3 88
!9DA0 11 47 E6 0F FE 0A 38 02 C6 07 C6 30 4F 78 0F 0F
!9DB0 0F 0F E6 0F FE 0A 38 02 C6 07 C6 30 47 C9 EB 21
!9DC0 00 00 CD 5C 1D DA 7C 1D 18 05 CD 5C 1D 38 1F 29
!9DD0 29 29 29 B5 6F 18 F3 13 1A FE 20 CA 5C 1D D6 30
!9DE0 D8 FE 0A 38 05 D6 07 FE 0A D8 FE 10 3F C9 EB 7A
!9DF0 4B E5 CD D1 10 E1 C9 1E 26 C3 FF 03 CD F9 0C CD
!9E00 01 09 C5 21 C3 1E 06 11 05 78 FE 01 28 08 CB 13
!9E10 CB 12 30 F4 18 04 CB 13 CB 12 3E 30 CE 00 77 23
!9E20 05 20 F3 AF 77 23 77 C1 21 C3 1E C3 88 11 EB 21
!9E30 00 00 CD D0 1D DA DE 1D D6 30 29 B5 6F CD D0 1D
!9E40 30 F6 EB 7A 4B E5 CD D1 10 E1 C9 13 1A FE 20 CA
!9E50 D0 1D FE 30 D8 FE 32 3F C9 1E 28 C3 FF 03

View File

@@ -0,0 +1,93 @@
.include "extern_symbols.s" ;include monitor symbols.
START_ADDR .EQU 0x8000
org START_ADDR
com_header:
jp com_prg
db 0x00
dw 0x00, 0x00, 0x00 ;always 0
dw [START_ADDR] ;start addr
dw [_eof] ;end of file
dw [_eof - START_ADDR] ;length
dc 48,0x00
com_prg:
;shadow rom
call PRINTINLINE
db 10,13,"Shadowing ROM @ 0x0000-0x3FFF ...",10,13,0
ld a,0x01 ;set bit1 to switch to ram
out (0x00),a ;store to bank select register
ld hl,[prg_start]
ld de,0
ld bc,[prg_end-prg_start]
ldir
jp 0x0000
prg_start:
phase 0x0000
BASRST_00: ;Hardware Restart
jp CSTART
defs 5
;org 0x0008
BASRST_08 ;Print Char
jp _BASRST_08
defs 5
;org 0x0010
BASRST_10 ;receive char
jp _BASRST_10
defs 5
;org 0x0018
BASRST_18 ;Buffer length
jp _BASRST_18
defs 5
;org 0x0044
_BASRST_08:
out (CS_SIO_A_D),a
_wait:
ld a,1
out (CS_SIO_A_C),A
in A,(CS_SIO_A_C) ;read RRx
bit 0,A
jr z,_wait
ret
_BASRST_10:
;RTS ON
ld a,005h ;write into WR0: select WR5
out (CS_SIO_A_C),A
ld a,0EAh ;DTR active, TX 8bit, BREAK off, TX on, RTS active
out (CS_SIO_A_C),A
nop
;read if avail
xor a ; a = 0
out (CS_SIO_A_C), a ; select reg 0
in a, (CS_SIO_A_C) ; read reg 0
and 1 ; mask D0 (recieve char available)
;RTS OFF
push af
ld a,005h ;write into WR0: select WR5
out (CS_SIO_A_C),A
ld a,068h ;DTR inactive, TX 8bit, BREAK off, TX on, RTS inactive
out (CS_SIO_A_C),A
pop af
ret Z ; return 0 if no char
;read data
in a, (CS_SIO_A_D) ; read char if avail
ret ; return
_BASRST_18:
ld a,0
ret
BASSTART:
.include "basic.s"
_WORKSPACE:
dephase
prg_end:
_eof:

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,107 @@
; Z8C I/O Drivers for CP/M 2.2
; (four drive single density version)
;
; Version 2.2 February, 1980
; Adapted by Dennis Gunia January, 2024
vers equ 22 ;version 2.2
;
; Copyright (c) 1980
; Digital Research
; Box 579, Pacific Grove
; California, 93950
;
;
true equ 0ffffh ;value of "true"
false equ not true ;"false"
test equ false ;true if test bios
;
if test
bias equ 03400h ;base of CCP in test system
endif
if not test
bias equ 0000h ;generate relocatable cp/m system
endif
;
patch equ 1600h
;
org patch
cpmb equ $-patch ;base of cpm console processor
bdos equ 806h+cpmb ;basic dos (resident portion)
cpml equ $-cpmb ;length (in bytes) of cpm system
nsects equ cpml/128 ;number of sectors to load
offset equ 2 ;number of disk tracks used by cp/m
cdisk equ 0004h ;address of last logged disk on warm start
buff equ 0080h ;default buffer address
retry equ 10 ;max retries on disk i/o before error
;
; perform following functions
; boot cold start
; wboot warm start (save i/o byte)
; (boot and wboot are the same for mds)
; const console status
; reg-a = 00 if no character ready
; reg-a = ff if character ready
; conin console character in (result in reg-a)
; conout console character out (char in reg-c)
; list list out (char in reg-c)
; punch punch out (char in reg-c)
; reader paper tape reader in (result to reg-a)
; home move to track 00
;
; (the following calls set-up the io parameter block for the
; mds, which is used to perform subsequent reads and writes)
; seldsk select disk given by reg-c (0,1,2...)
; settrk set track address (0,...76) for subsequent read/write
; setsec set sector address (1,...,26) for subsequent read/write
; setdma set subsequent dma address (initially 80h)
;
; (read and write assume previous calls to set up the io parameters)
; read read track/sector to preset dma address
; write write track/sector from preset dma address
;
; jump vector for indiviual routines
jmp boot
wboote: jmp wboot
jmp const
jmp conin
jmp conout
jmp list
jmp punch
jmp reader
jmp home
jmp seldsk
jmp settrk
jmp setsec
jmp setdma
jmp read
jmp write
jmp listst ;list status
jmp sectran
readf equ 4h ;read function
writf equ 6h ;write function
recal equ 3h ;recalibrate drive
iordy equ 4h ;i/o finished mask
cr equ 0dh ;carriage return
lf equ 0ah ;line feed
;
signon: ;signon message: xxk cp/m vers y.y
db cr,lf,lf
if test
db '32' ;32k example bios
endif
if not test
db '00' ;memory size filled by relocator
endif
db 'k CP/M vers '
db vers/10+'0','.',vers mod 10+'0'
db cr,lf,0
;
boot: ;print signon message and go to ccp
; (note: mds boot initialized iobyte at 0003h)
lxi sp,buff+80h
lxi h,signon
call prmsg ;print message
xra a ;clear accumulator
sta cdisk ;set initially to disk a
jmp gocpm ;go to cp/m

View File

@@ -0,0 +1 @@
../../monitor_v2/zout/symbols.s

View File

@@ -0,0 +1,5 @@
export OPT_GEN_SYMBOLTABLE=0
export OPT_GEN_MONFILE=1
export OPT_GEN_OBJFILE=1
export OPT_WRITEROM=0
export FILENAME=test

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,487 @@
:10800000C340800000000000000000805E9E5E1EF5
:108010000000000000000000000000000000000060
:108020000000000000000000000000000000000050
:108030000000000000000000000000000000000040
:10804000CD91010A0D536861646F77696E672052A4
:108050004F4D2040203078303030302D307833464E
:108060004646202E2E2E0A0D003E01D300217B8095
:1080700011000001E31DEDB0C30000C35A00000071
:10808000000000C320000000000000C32D0000001D
:10809000000000C34B000000000000D3083E01D3E5
:1080A00009DB09CB4728F6C93E05D3093EEAD309C7
:1080B00000AFD309DB09E601F53E05D3093E68D3DD
:1080C00009F1C8DB08C93E00C9C35A00C3DD000579
:1080D0000109D210C021E31DF9AF32301E211E0369
:1080E000015A0011E31DEDB0EBF9CD2605CD190BBA
:1080F00032841E32D31E21371F237CB5CAA2007ED4
:10810000472F77BE70CA7E00C3A200CD1B09B7C23D
:10811000EB03EB2B3ED94677BE70C27B002B1136AA
:108120001F7C9220027D93DA7B0011CEFF22891EF4
:108130001922341ECD01052A341E11EFFF1911D367
:108140001E7D936F7C9A67E521F500CD0212E1CD8B
:10815000CF1821E600CD021231401ECD2605C339CD
:108160000420427974657320667265650D0A00000B
:108170005A38302042415349432056657220342EEC
:1081800037630D0A436F70797269676874202843FA
:10819000292031393738206279204D6963726F7335
:1081A0006F66740D0A4D6F64696669656420666F59
:1081B00072205A38432062792044656E6E697320BC
:1081C00047756E69610D0A00004D656D6F7279200B
:1081D000746F70004E1704186417E61DB0105E141B
:1081E000DE10DC19D51AE415371A631B691BCF1B87
:1081F000E91BB214551C8B13821125149A13AB136F
:10820000EE1C811DBB13EB13F513C54E44C64F5234
:10821000CE455854C4415441C94E505554C4494D9B
:10822000D2454144CC4554C74F544FD2554EC94610
:10823000D24553544F5245C74F535542D2455455DA
:10824000524ED2454DD3544F50CF5554CF4ECE55AC
:108250004C4CD7414954C44546D04F4B45C44F4B75
:1082600045CC494E4553C34C53D749445448CD4F50
:108270004E49544F52D245534554D052494E54C39F
:108280004F4E54CC495354C34C454152C84C4F41B6
:1082900044CE4557D4414228D44FC64ED3504328EC
:1082A000D448454ECE4F54D3544550ABADAAAFDE63
:1082B000C14E44CF52BEBDBCD3474EC94E54C1423D
:1082C00053D55352C65245C94E50D04F53D3515235
:1082D000D24E44CC4F47C55850C34F53D3494ED4C8
:1082E000414EC1544ED045454BC445454BCC454EFF
:1082F000D3545224D6414CC15343C3485224C84599
:108300005824C2494E24CC45465424D249474854A7
:1083100024CD4944248099088D079B0CF0099A0BC1
:10832000F00EC90B070AAA098D09970A5E08990978
:10833000CB09F20997086A14790AD8087014E61074
:10834000B914601C461C381C3E1C351C5900BB0A65
:10835000C50804074409771C000579B61879D714B5
:108360007C23167C8E167FED1950440E46430E4E2C
:1083700046534E52474F4446434F564F4D554C423D
:108380005344442F304944544D4F534C535354435A
:108390004E55464D4F4858424EC3DD00C31609D3D3
:1083A00000C9D6006F7CDE006778DE00473E00C95A
:1083B000000000354ACA99391C76982295B3980A6C
:1083C000DD479853D199990A1A9F9865BCCD98D6E4
:1083D000773E9852C74F80DB00C901FF1C00001494
:1083E00000140000000000C33906371FFEFFD41E32
:1083F00003204572726F720020696E20004F6B0D72
:108400000A0000427265616B00210400397E23FE80
:1084100081C04E234623E569607AB3EBCAAB03EB18
:108420007C9220027D93010D00E1C809C39203CD27
:10843000D103C5E3C17C9220027D937E02C80B2B41
:10844000C3BA03E52AB41E060009093EE53ED095ED
:108450006F3EFF9CDAE0036739E1D81E0CC3FF03CF
:108460002AA31E22361E1E02011E14011E00011E1A
:1084700012011E22011E0A011E18CD260532281ED9
:10848000CD0C0B21F402573E3FCDC706197ECDC758
:1084900006CD4F08CDC706217603CD02122A361E1F
:1084A00011FEFF7C9220027D93CA5A007CA53CC439
:1084B000C7183EC1AF32281ECD0C0B218203CD025E
:1084C0001221FFFF22361ECD311EDA4604CD4F08A1
:1084D0003C3DCA4604F5CD1B09D5CD500547D1F129
:1084E000D22F08D5C5AF32A61ECD4F08B7F5CDDDCA
:1084F00004DA7F04F1F5CAC609B7C5D29904EB2A9C
:10850000B01E1A0203137C9220027D93C28704607E
:108510006922B01ED1F1CAC0042AB01EE3C109E528
:10852000CDB403E122B01EEB74D123237323722355
:10853000113B1E1A772313B7C2B804CD0C0523EBE9
:10854000626B7E23B6CA4604232323AFBE23C2D167
:1085500004EB732372C3C5042A381E444D7E23B630
:108560002BC823237E23666F7C9220027D93606953
:108570007E23666F3FC83FD0C3E004C02A381EAFD9
:108580007723772322B01E2A381E2B22A81E2A8981
:108590001E229D1EAFCD5E082AB01E22B21E22B43E
:1085A0001EC12A341EF9218D1E228B1EAF6F672239
:1085B000AE1E32A51E22B81EE5C52AA81EC93E3F22
:1085C000CDC7063E20CDC706C3311EAF32881E0E72
:1085D00005113B1E7EFE20CAD80547FE22CAF805BB
:1085E000B7CAFF053A881EB77EC2D805FE3F3E9C3B
:1085F000CAD8057EFE30DA8305FE3CDAD805D511EF
:108600008E01C501D405C5067F7EFE61DA9C05FE9C
:108610007BD29C05E65F774EEB23B6F29E05047E87
:10862000E67FC8B9C29E05EBE5131AB7FAD0054F2D
:1086300078FE88C2BF05CD4F082B237EFE61DAC8C5
:1086400005E65FB9CAAE05E1C39C0548F1EBC9EB8D
:1086500079C1D12312130CD63ACAE605FE49C2E904
:108660000532881ED654C25905477EB7CAFF05B8E1
:10867000CAD80523120C13C3EF05213A1E12131298
:108680001312C93A271EB73E0032271EC21C060528
:10869000CA311ECDC7063E052BCA30067ECDC706A1
:1086A000C34206052BCDC706C24206CDC706CD196B
:1086B0000BC3311E213B1E0601AF32271ECDF5062E
:1086C0004FFE7FCA08063A271EB7CA5B063E00CD9A
:1086D000C706AF32271E79FE07CA9F06FE03CC19D4
:1086E0000B37C8FE0DCA140BFE15CA3306FE40CA6E
:1086F0003006FE5FCA2806FE08CA2806FE12C29A85
:1087000006C5D5E53600CDEF06213B1ECD0212E1B0
:10871000D1C1C34206FE20DA420678FE493E07D2A6
:10872000B406797132A61E2304CDC706C34206CD16
:10873000C7063E08C3AE067EE3BE23E3CA4F08C3A6
:10874000EB03F53A281EB7C23A12F1C5F5FE20DA5E
:10875000EB063A251E473A851E04CAE70605B8CC43
:10876000190B3C32851EF1C1CFC9CDC706C3190B09
:10877000D7E67FFE0FC03A281E2F32281EAFC9CD84
:108780001B09C0C1CDDD04C5CD5A07E14E234623E8
:1087900078B1CA3904CD6307CD7908C5CD190B5E10
:1087A000235623E5EBCDCF183E20E1CDC7067EB79B
:1087B00023CA1007F23007D67F4F118F011A13B763
:1087C000F242070DC24207E67FCDC7061A13B7F281
:1087D0004C07C33307E52A2B1E22291EE1C9E5D524
:1087E0002A291E11FFFFED5A22291ED1E1F0E52AA8
:1087F0002B1E22291ED7FE03CA8407E1C363072A62
:108800002B1E22291EC3E0003E6432A51ECD070A9E
:10881000C1E5CDF00922A11E21020039CD9203D17C
:10882000C2C10709D52B562B5E2323E52AA11E7C46
:1088300092C2BB077D93E1C2A107D1F9EB0E08CD2F
:10884000C803E52AA11EE3E52A361EE3CDF90CCDC7
:10885000BC06A3CDF60CED5BBE1EED4BC01EC5D510
:10886000010081515A7EFEA83E01C20308CD4F0887
:10887000CDF60CED5BBE1EED4BC01ECD3F17C5D532
:10888000F533E52AA81EE30681C533CD790822A871
:108890001E7EFE3ACA2F08B7C2EB03237E23B6CA58
:1088A000A108235E2356ED53361ECD4F0811100844
:1088B000D5C8D680DA070AFE22D2EB03074F06009E
:1088C000EB219B02094E2346C5EB237EFE3AD0FEE8
:1088D0002028F7FE303F3C3DC9EB2A381ECA7308FA
:1088E000EBCD1B09E5CDDD046069D1D2C6092B2291
:1088F000B61EEBC9DFB7C8D7FE1B2811FE03280D33
:10890000FE13C0D7FE11C8FE03280718F63EFF323B
:10891000301EC0F6C022A81E21F6FFC12A361EF561
:108920007DA43CCAB40822AC1E2AA81E22AE1EAFEB
:1089300032281ECD0C0BF1218803C21F04C3390459
:108940002AAE1E7CB51E20CAFF03EB2AAC1E2236BF
:108950001EEBC9CDA114C032241EC9E52A2D1E0666
:10896000004F09222D1EE1C97EFE41D8FE5B3FC9A2
:10897000CD4F08CDF60CCD3F17FA16093AC11EFEB1
:1089800090DAD417018090110000E5CDA717E151CE
:10899000C81E08C3FF032B110000CD4F08D0E5F51A
:1089A0002198197C92C22F097D93DAEB03626B192F
:1089B000291929F1D6305F160019EBE1C31F09CA46
:1089C0001005CDF8082BCD4F08E52A891ECA670986
:1089D000E1CDBC062CD5CDF8082BCD4F08C2EB035A
:1089E000E3EB7D935F7C9A57DAE003E52AB01E0142
:1089F0002800097C9220027D93D2E003EB22341EF2
:108A0000E122891EE1C31005CA0C05CD1005011035
:108A100008C3A9090E03CDC803C1E5E52A361EE344
:108A20003E8CF533C5CD1B09CDF209E52A361E7CF7
:108A30009220027D93E123DCE004D4DD0460692B05
:108A4000D81E0EC3FF03C016FFCD8E03F9FE8C1E89
:108A500004C2FF03E122361E237CB5C2EA093AA60E
:108A60001EB7C23804211008E33EE1013A0E0006A9
:108A7000007948477EB7C8B8C823FE22CAF609C3A2
:108A8000F909CDF50ECDBC06B1D53A871EF5CD0856
:108A90000DF1E322A81E1FCDFB0CCA690AE52ABE10
:108AA0001EE523235E23562A381E7C9220027D93E6
:108AB000D2520A2A341E7C9220027D93D1D25A0AC5
:108AC00021991E7C9220027D93D25A0A3ED1CD7705
:108AD00013EBCD9211CD7713E1EBEDA0EDA0EDA05E
:108AE000EDA0E1C9E511BE1EEBEDA0EDA0EDA0EDFE
:108AF000A0D1E1C9CDA1147E47FE8CCA880ACDBCA5
:108B000006882B4B0D78CA3708CD1C09FE2CC0C334
:108B1000890ACD080D7EFE88CAA50ACDBC06A62B03
:108B2000CDF90CCD3F17CAF209CD4F08DAAA09C317
:108B300036082BCD4F08CA190BC8FEA2CA4C0BFE33
:108B4000A5CA4C0BE5FE2CCA350BFE3BCA6F0BC108
:108B5000CD080DE53A871EB7C2050BCDDA18CDB6A4
:108B60001136202ABE1E342ABE1E3A251E4704CACC
:108B7000010B043A851E863DB8D4190BCD0512AF02
:108B8000C40512E1C3B70A3A851EB7C8C3190B362C
:108B900000213A1E3E0DCDC7063E0ACDC706AF32B4
:108BA000851E3A241E3DC8F5AFCDC706F1C32A0B7A
:108BB0003A261E473A851EB8D4190BD26F0BD60E33
:108BC000D2430B2FC3640BF5CD9E14CDBC06292BCD
:108BD000F1D6A5E5CA5F0B3A851E2F83D26F0B3CF9
:108BE000473E20CDC70605C2680BE1CD4F08C3BE86
:108BF0000A3F5265646F2066726F6D2073746172F4
:108C0000740D0A003AA71EB7C2E503C121760BCD49
:108C10000212C33F05CD63117EFE223E0032281EA4
:108C2000C2B40BCDB711CDBC063BE5CD05123EE578
:108C3000CD4305C1DA9E08237EB72BC5CAEF09369E
:108C40002CC3CE0BE52AB61EF6AF32A71EE3C3DA5D
:108C50000BCDBC062CCDF50EE3D57EFE2CCA020C46
:108C60003AA71EB7C2780C3E3FCDC706CD4305D10B
:108C7000C1DA9E08237EB72BC5CAEF09D53A871EF5
:108C8000B7CA2C0CCD4F085747FE22CA200C3AA772
:108C90001EB757CA1D0C163A062C2BCDBA11EB2164
:108CA000400CE3D5C3220ACD4F08CD3718E311BEDF
:108CB0001EEBEDA0EDA0EDA0EDA0E12BCD4F08CA7D
:108CC0004C0CFE2CC2890BE32BCD4F08C2D60BD126
:108CD0003AA71EB7EBC27408D5B621670CC40212BE
:108CE000E1C93F45787472612069676E6F7265648F
:108CF0000D0A00CDF009B7C2900C237E23B61E06E4
:108D0000CAFF03235E2356ED53A31ECD4F08FE83F7
:108D1000C2780CC3020C110000C4F50E22A81ECDAF
:108D20008E03C2F103F9D57E23F5D511BE1EEDA049
:108D3000EDA0EDA0EDA0E3E5CDCD14D121BE1EED5B
:108D4000A0EDA0EDA0EDA0E1CD8917E5CDA717E13D
:108D5000C190CD8917CAE60CEB22361E6960C30CA0
:108D600008F92AA81E7EFE2CC21008CD4F08CD9E01
:108D70000CCD080DF6373A871E8FB7E8C3FD03CD3B
:108D8000BC06282B1600D50E01CDC803CD820D22BE
:108D9000AA1E2AAA1EC178FE78D4F90C7E1600D627
:108DA000B0DA400DFE03D2400DFE0117AABA57DA21
:108DB000EB03229F1ECD4F08C3240D7AB7C2700E5D
:108DC0007E229F1ED6A9D8FE07D05F3A871E3DB3EC
:108DD0007BCA091307835F21DF02197856BAD023B3
:108DE000CDF90CC501170DC5ED4BBE1EC5ED4BC031
:108DF0001EC54E234623C52A9F1EC30B0DAF3287C7
:108E00001ECD4F081E24CAFF03DA3718CDED08D255
:108E1000EA0DFEA9CA820DFE2ECA3718FEAACAD9CB
:108E20000DFE22CAB711FEA7CAD00EFEA4CA1311A6
:108E3000FE26C2CC0DCD4F08FE48CA431DFE42CAD5
:108E4000B31D1E02CAFF03D6B3D2FB0DCD040DCD58
:108E5000BC0629C9167DCD0B0D2AAA1EE5CD6817C3
:108E6000CDF90CE1C9CDF50EE5EB22BE1E3A871E09
:108E7000B7CC7D17E1C90600074FC5CD4F0879FE75
:108E80002FDA220ECD040DCDBC062CCDFA0CEB2A28
:108E9000BE1EE3E5EBCDA114EBE3C32A0ECDD10D4D
:108EA000E311E50DD5015901094E236669E915FE67
:108EB000AAC8FE2DC814FE2BC8FEA9C82BC9F6AF40
:108EC000F5CDF90CCD0109F1EBC1E3EBED53BE1E7D
:108ED000ED43C01EF5CD0109F1C17921D110C26B5E
:108EE0000EA34F78A2E9B34F78B2E921820E3A87F8
:108EF0001E1F7A175F166478BAD0C3680D840E7986
:108F0000B71FC1D1F5CDFB0C21C60EE5CAA717AF1F
:108F100032871ED5CD56137E23234E2346D1C5F569
:108F2000CD5A13CD8917F157E17BB2C87AD601D853
:108F3000AFBB3CD0151D0ABE2303CAAE0E3FC34AC9
:108F4000173C8FC1A0C6FF9FC35117165ACD0B0DFA
:108F5000CDF90CCD01097B2F4F7A2FCDD110C1C394
:108F6000170D2BCD4F08C8CDBC062C01E70EC5F65A
:108F7000AF32861E46CDED08DAEB03AF4F32871EC7
:108F8000CD4F08DA110FCDED08DA1E0F4FCD4F0887
:108F9000DA120FCDED08D2120FD624C22D0F3C32BB
:108FA000871E0F814FCD4F083AA51E3DCAE80FF22C
:108FB0003D0F7ED628CAC00FAF32A51EE550592AF4
:108FC000B81E7C92C24E0F7D9311BA1ECA75132A29
:108FD000B21EEB2AB01E7C92C2620F7D93CA780F3C
:108FE000799623C26D0F789623CAB20F23232323C9
:108FF000C35B0FE1E3D511ED0D7C9220027D93D18F
:10900000CAB50FE3E5C50106002AB41EE509C1E5AE
:10901000CDB403E122B41E606922B21E2B36007C5F
:109020009220027D93C2A10FD173237223EBE1C979
:1090300032C11E21810322BE1EE1C9E52A861EE33C
:1090400057D5C5CDF508C1F1EBE3E5EB3C577EFE06
:109050002CCAC60FCDBC062922AA1EE122861E1EDE
:1090600000D511E5F52AB21E3E19ED5BB41E7C92C7
:10907000C2FA0F7D93CA23107EB923C205107EB8B1
:10908000235E235623C2EE0F3A861EB7C2F403F1C5
:10909000444DCA751396CA84101E10C3FF031104F1
:1090A00000F1CA1609712370234FCDC80323232270
:1090B0009F1E71233A861E1779010B00D24610C1FC
:1090C0000371237023F5E5CD1D18EBE1F13DC23EA0
:1090D00010F5424BEB19DAE003CDD10322B41E2B7D
:1090E00036007C9220027D93C2641003572A9F1E93
:1090F0005EEB2909EB2B2B73237223F1DAAC1047BB
:109100004F7E2316E15E235623E3F57C92C297102F
:109110007D93D21E10E5CD1D18D119F13D444DC2ED
:1091200089102929C109EB2AAA1EC92AB41EEB21DC
:109130000000393A871EB7CACC10CD5613CD48125D
:109140002A341EEB2A9D1E7D934F7C9A41501E00AF
:1091500021871E730690C356173A851E47AFC3D2A8
:1091600010CD7111CD631101F009C5D5CDBC062814
:10917000CDF50EE5EB2B562B5EE1CDF90CCDBC0603
:1091800029CDBC06B1444DE3712370C3B011CD713C
:1091900011D5CDD10DCDF90CE35E2356237AB3CA98
:1091A000F7037E23666FE52AB81EE322B81E2ABCA9
:1091B0001EE52ABA1EE5D511BA1E21BE1EEDA0ED90
:1091C000A0EDA0EDA0E1CDF60C2BCD4F08C2EB0336
:1091D000E122BA1EE122BC1EE122B81EE1C9E52A45
:1091E000361E237CB5E1C01E16C3FF03CDBC06A40A
:1091F0003E8032A51EB647CDFA0EC3F90CCDF90C50
:10920000CDDA18CDB611CD561301B713C57E232381
:10921000E5CD1B12E14E2346CDAA11E56FCD4913D2
:10922000D1C9CD1B1221991EE5772323732372E147
:10923000C92B062250E50EFF237E0CB7CACC11BA0B
:10924000CACC11B8C2BD11FE22CC4F08E323EB7982
:10925000CDAA1111991E2A8B1E22BE1E3E013287F5
:109260001EEBEDA0EDA0EDA0EDA0EB7C9220027D29
:1092700093228B1EE17EC01E1EC3FF0323CDB611B9
:10928000CD5613CD89171C1DC80ACDC706FE0DCCBF
:10929000230B03C30C12B70EF1F52A341EEB2A9DE3
:1092A0001E2F4F06FF09237C9220027D93DA3C1289
:1092B000229D1E23EBF1C9F11E1ACAFF03BFF5015F
:1092C0001D12C52A891E229D1E210000E52A341E7A
:1092D000E5218D1EED5B8B1E7C9220027D93015952
:1092E00012C2B5122AB01EED5BB21E7C9220027D26
:1092F00093CA84127E2323B7CDB812C36C12C1ED7A
:109300005BB41E7C9220027D93CAE412CD89177B48
:10931000E509B7F28312229F1EE14E0600090923D8
:10932000ED5B9F1E7C9220027D93CA841201A512E0
:10933000C5F6807E23235E235623F0B7C8444D2A0A
:109340009D1E7C9220027D936069D8E1E37C92208F
:10935000027D93E3E56069D0C1F1F1E5D5C5C9D1DE
:10936000E17DB4C82B462B4EE52B2B6E2600095011
:10937000592B444D2A9D1ECDB703E17123706960BE
:109380002BC34B12C5E52ABE1EE3CD820DE3CDFAF9
:109390000C7EE52ABE1EE5861E1CDAFF03CDA71152
:1093A000D1CD5A13E3CD5913E52A9B1EEBCD4013C3
:1093B000CD401321140DE3E5C3D811E1E37E23234F
:1093C0004E23466F2C2DC80A120313C34A13CDFA3D
:1093D0000C2ABE1EEBCD7713EBC0D550591B4E2A7D
:1093E0009D1E7C9220027D93C275134709229D1E0B
:1093F000E1C92A8B1E2B462B4E2B2B7C9220027D03
:1094000093C0228B1EC901E110C5CD5313AF573253
:10941000871E7EB7C901E110C5CD8F13CA16092377
:10942000235E23561AC93E01CDA711CDA4142A9B51
:109430001E73C1C3D811CD5414AFE34FE57EB8DA23
:10944000C91378110E00C5CD1B12C1E1E5232346D7
:10945000236668060009444DCDAA116FCD4913D18A
:10946000CD5A13C3D811CD5414D1D51A90C3BF13FC
:10947000EB7ECD59140405CA1609C51EFFFE29CA84
:109480000E14CDBC062CCDA114CDBC0629F1E301F0
:10949000C113C53DBE0600D04F7E91BB47D843C91E
:1094A000CD8F13CA4A155F23237E23666FE51946C5
:1094B00072E3C57EFE24C24314CD431D180DFE2564
:1094C000C24D14CDB31D1803CD3718C1E170C9EBDF
:1094D000CDBC0629C1D1C543C9CDA41432221ECDAD
:1094E000211EC3E110CD8E14C3E91DCD8E14F51ECF
:1094F000002BCD4F08CA8414CDBC062CCDA114C1BD
:10950000CD211EABA0CA8514C9CDA11432221E32B2
:10951000EA1DCDBC062CC3A114CD4F08CDF60CCD51
:10952000FB087AB7C216092BCD4F087BC9CD0109BC
:109530001AC3E110CDF60CCD0109D5CDBC062CCD5A
:10954000A114D112C921C119CD8917C3DC14CD8949
:109550001721C1D1CD681778B7C83AC11EB7CA79EB
:109560001590D2FE142F3C2ABE1EE52AC01EE5ED42
:1095700053BE1EED43C01EC1D1FE19D0F5CD9217CA
:1095800067F1CDAF15B421BE1EF22415CD8F15D2D3
:109590006A152334CAFA032E01CDC515C36A15AF67
:1095A00090477E9B5F237E9A57237E994FDC9B15C5
:1095B0006863AF4779B7C257154A54656F78D608C4
:1095C000FEE0C23815AF32C11EC905297A17577996
:1095D0008F4FF24F15785C45B7CA6A1521C11E86B8
:1095E00077D24A15C87821C11EB7FC821546237E62
:1095F000E680A94FED53BE1EED43C01EC91CC0142A
:10960000C00CC00E8034C0C3FA037E835F237E8A01
:1096100057237E894FC921C21E7E2F77AF6F904797
:109620007D9B5F7D9A577D994FC90600D608DABEAB
:1096300015435A510E00C3B115C6096FAF2DC87935
:109640001F4F7A1F577B1F5F781F47C3C11500004C
:10965000008103AA561980F122768045AA3882CD6E
:109660003F17B7EA160921C11E7E01358011F304A8
:1096700090F570D5C5CDDC14C1D104CD901621D3A1
:1096800015CDD31421D715CD981A01808011000073
:10969000CDDC14F1CDAB1801318011187221C1D18C
:1096A000CD3F17C82E00CDF8167932D01EEB22D14F
:1096B0001E0100005058213515E5214716E5E5212A
:1096C000BE1E7E23B7CA7316E52E081F6779D261C6
:1096D00016E52AD11E19EBE13AD01E891F4F7A1FD9
:1096E000577B1F5F781F472D7CC25016E1C9435A34
:1096F000514FC92ABE1EE52AC01EE5012084110073
:1097000000ED53BE1EED43C01EC1D1CD3F17CAEEC2
:10971000032EFFCDF81634342B7E32F51D2B7E320E
:10972000F11D2B7E32ED1D41EBAF4F575F32F81D1F
:10973000E5C57DCDEC1DDE003FD2C81632F81DF127
:10974000F137D2C1E1793C3D1FFA6B15177B175FEA
:109750007A175779174F297817473AF81D1732F8B3
:109760001D79B2B3C2B516E521C11E35E1C2B516E9
:10977000C3FA0378B7CA1C177D21C11EAE80471FEC
:10978000A878F21B17C68077CA7513CD9217772B6E
:10979000C9CD3F172FE1B7E1F24A15C3FA03ED5BDC
:1097A000BE1EED4BC01E78B7C8C602DAFA0347CD1D
:1097B000DC1421C11E34C0C3FA033AC11EB7C83A33
:1097C000C01EFE2F179FC03CC9CD3F170688110051
:1097D0000021C11E4F70060023368017C33215CDFD
:1097E0003F17F021C01E7EEE8077C9EB2ABE1EE334
:1097F000E52AC01EE3E5EBC911BE1EEDA0EDA0ED0C
:10980000A0EDA0C95E2356234E234623C921C01EC6
:109810007E07371F773F1F2323777907371F4F1F97
:10982000AEC978B7CA3F17214817E5CD3F1779C8A9
:1098300021C01EAE79F8CDC1171FA9C92378BEC0BB
:109840002B79BEC02B7ABEC02B7B96C0E1E1C94705
:109850004F575FB7C8E5ED5BBE1EED4BC01ECD9206
:1098600017AE67FCFD173E9890CDAF157C17DC82D4
:10987000150600DC9B15E1C91B7AA33CC00BC9216E
:10988000C11E7EFE983ABE1ED07ECDD41736987B80
:10989000F57917CD3215F1C921000078B1C87806E5
:1098A0001029DA1E10CB1117D2341819DA1E101035
:1098B000F0C9FE2DF5CA4318FE2BCA43182BCD4A1A
:1098C0001547575F2F4FCD4F08DA9418FE2ECA6FF9
:1098D00018FE45C27318CD4F08CD330ECD4F08DAB0
:1098E000BB1814C27318AF935F0C0CCA4B18E57BFE
:1098F00090F48C18F28218F5CD7816F13CC27618E7
:10990000D1F1CC6817EBC9C8F5CD2317F13DC9D506
:1099100057788947C5E5D5CD2317F1D630CDAB189B
:10992000E1C1D1C34B182ABE1EE52AC01EE5CD51A8
:1099300017C1D1C3DC147B0707830786D6305FC30A
:109940006118E5217D03CD0212E1EBAF0698CD56FB
:1099500017210112E521C31EE5CD3F173620F2E89D
:1099600018362D233630CAAC19E5FC6817AFF5CD93
:10997000B21901439111F84FCDA717B7E21519F1AC
:10998000CD8D18F5C3F718CD7816F13CF5CDB21989
:10999000CDCA143CCDD417ED53BE1EED43C01E01FD
:1099A0000603F1813CFA3619FE08D236193C473ECF
:1099B000023D3DE1F511C51905C24719362E233682
:1099C000302305362ECC9017C5E5EBED5BBE1EEDC2
:1099D0004BC01E062F047B965F237A9E5723799EE9
:1099E0004F2B2BD25A19CD8F1523ED53BE1EED43AD
:1099F000C01EEBE17023C10DC2471905CA90192B97
:109A00007EFE30CA8419FE2EC49017F1CAAF1936F3
:109A10004523362BF2A019362D2F3C062F04D60AEB
:109A2000D2A219C63A237023772371E1C901749435
:109A300011F723CDA717B7E1E20C19E90000008068
:109A4000A08601102700E803006400000A0000015E
:109A50000000216817E3E9CD701721C11911BE1E5E
:109A6000EDA0EDA0EDA0EDA0C1D1CD3F1778CA3794
:109A70001AF2FD19B7CAEE03B7CA4B15D5C579F668
:109A80007FED5BBE1EED4BC01EF21F1AD5C5CD0487
:109A900018C1D1F5CDA717E17C1FE122C01EE1223C
:109AA000BE1EDCD719CC6817D5C5CDE415C1D1CD04
:109AB0002516CD7017013881113BAACD25163AC164
:109AC0001EFE88D21617CD0418C680C602DA1617F5
:109AD000F521D315CDCD14CD1C16F1C1D1F5CDD9BD
:109AE00014CD681721771ACDAC1A110000C14AC3F2
:109AF000251608402E9474704F2E776E02887AE6F1
:109B0000A02A7C50AAAA7EFFFF7F7F0000808100F0
:109B1000000081CD7017112316D5E5ED5BBE1EED5B
:109B20004BC01ECD2516E1CD70177E2311BE1EED54
:109B3000A0EDA0EDA0EDA006F1C1D13DC8D5C5F5C1
:109B4000E5CD2516E1CD8917E5CDDC14E1C3BD1ABD
:109B5000CD3F1721FC1DFA4F1B211D1E11BE1EED0E
:109B6000A0EDA0EDA0EDA021FC1DC886E607060033
:109B7000772387874F09CD8917CD25163AFB1D3CE2
:109B8000E6030600FE018832FB1D21531B87874F29
:109B900009CDCD14ED5BBE1EED4BC01E7B59EE4FC3
:109BA0004F21C21E36802B46368021FA1D347ED6C8
:109BB000ABC23D1B770C151CCD3515111D1E21BEEA
:109BC0001EEDA0EDA0EDA0EDA0C9772B772B77C3FC
:109BD000191B68B1466899E9926910D1756821B27C
:109BE0001BCDCD14CD701701498311DB0FED53BE92
:109BF0001EED43C01EC1D1CD9016CD7017CD0418F7
:109C0000C1D1CDD91421B61BCDD314CD3F1737F216
:109C10009E1BCDCA14CD3F17B7F5F4681721B61BAC
:109C2000CDCD14F1D4681721BA1BC3981ADB0F49A4
:109C3000810000007F05BAD71E86642699875834B4
:109C40002387E05DA586DA0F4983CD7017CD691BA8
:109C5000C1E1CD7017EBED53BE1EED43C01ECD63C9
:109C60001BC38E16CD3F17FCD719FC68173AC11ECF
:109C7000FE81DA061C0100815159CD901621D314C2
:109C8000E521101CCD981A21B21BC9094AD73B788F
:109C9000026E847BFEC12F7C74319A7D843D5A7D97
:109CA000C87F917EE4BB4C7E6CAAAA7F0000008135
:109CB000C300003E0CCFC9ED45CDA1147B32251E5B
:109CC000C9CDF60CCD0109ED53291EED532B1EC94C
:109CD000CD0109D5E146237EC3D210CDF60CCD01CE
:109CE00009D5CDBC062CCDF60CCD0109E37323724A
:109CF000E1C9C0CD961C1B2A891EAFED52380BED71
:109D000053891E21CEFF1922341E13ED53E71D186F
:109D100021D7FE3A20FB0E00CDD41C47CDD41C57D2
:109D2000CDD41C5FCDD41C3D281A3CC2FD03C9CD47
:109D3000961CCDD41C121310F9CDD41C79B7C27C5B
:109D40001DC3B41CCDD41C79B7C27C1DC3E000CDAB
:109D5000E51C070707076FCDE51CB56F814F7DC96F
:109D6000D7D630FE0AD8D607C9CDF90CCD0109C522
:109D700021C31E7AFE00280CCD261D78FE30280255
:109D8000702371237BCD261D7AFE00200578FE30DE
:109D9000280270237123AF772377C121C31EC388A4
:109DA0001147E60FFE0A3802C607C6304F780F0F7C
:109DB0000F0FE60FFE0A3802C607C63047C9EB216F
:109DC0000000CD5C1DDA7C1D1805CD5C1D381F29F7
:109DD000292929B56F18F3131AFE20CA5C1DD63045
:109DE000D8FE0A3805D607FE0AD8FE103FC9EB7A1E
:109DF0004BE5CDD110E1C91E26C3FF03CDF90CCD33
:109E00000109C521C31E06110578FE012808CB13E0
:109E1000CB1230F41804CB13CB123E30CE00772394
:109E20000520F3AF772377C121C31EC38811EB212F
:109E30000000CDD01DDADE1DD63029B56FCDD01D86
:109E400030F6EB7A4BE5CDD110E1C9131AFE20CAEA
:0E9E5000D01DFE30D8FE323FC91E28C3FF03CE
:00000001FF

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,486 @@
!8000 C3 40 80 00 00 00 00 00 00 00 00 80 5E 9E 5E 1E
!8010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
!8020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
!8030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
!8040 CD 91 01 0A 0D 53 68 61 64 6F 77 69 6E 67 20 52
!8050 4F 4D 20 40 20 30 78 30 30 30 30 2D 30 78 33 46
!8060 46 46 20 2E 2E 2E 0A 0D 00 3E 01 D3 00 21 7B 80
!8070 11 00 00 01 E3 1D ED B0 C3 00 00 C3 5A 00 00 00
!8080 00 00 00 C3 20 00 00 00 00 00 00 C3 2D 00 00 00
!8090 00 00 00 C3 4B 00 00 00 00 00 00 D3 08 3E 01 D3
!80A0 09 DB 09 CB 47 28 F6 C9 3E 05 D3 09 3E EA D3 09
!80B0 00 AF D3 09 DB 09 E6 01 F5 3E 05 D3 09 3E 68 D3
!80C0 09 F1 C8 DB 08 C9 3E 00 C9 C3 5A 00 C3 DD 00 05
!80D0 01 09 D2 10 C0 21 E3 1D F9 AF 32 30 1E 21 1E 03
!80E0 01 5A 00 11 E3 1D ED B0 EB F9 CD 26 05 CD 19 0B
!80F0 32 84 1E 32 D3 1E 21 37 1F 23 7C B5 CA A2 00 7E
!8100 47 2F 77 BE 70 CA 7E 00 C3 A2 00 CD 1B 09 B7 C2
!8110 EB 03 EB 2B 3E D9 46 77 BE 70 C2 7B 00 2B 11 36
!8120 1F 7C 92 20 02 7D 93 DA 7B 00 11 CE FF 22 89 1E
!8130 19 22 34 1E CD 01 05 2A 34 1E 11 EF FF 19 11 D3
!8140 1E 7D 93 6F 7C 9A 67 E5 21 F5 00 CD 02 12 E1 CD
!8150 CF 18 21 E6 00 CD 02 12 31 40 1E CD 26 05 C3 39
!8160 04 20 42 79 74 65 73 20 66 72 65 65 0D 0A 00 00
!8170 5A 38 30 20 42 41 53 49 43 20 56 65 72 20 34 2E
!8180 37 63 0D 0A 43 6F 70 79 72 69 67 68 74 20 28 43
!8190 29 20 31 39 37 38 20 62 79 20 4D 69 63 72 6F 73
!81A0 6F 66 74 0D 0A 4D 6F 64 69 66 69 65 64 20 66 6F
!81B0 72 20 5A 38 43 20 62 79 20 44 65 6E 6E 69 73 20
!81C0 47 75 6E 69 61 0D 0A 00 00 4D 65 6D 6F 72 79 20
!81D0 74 6F 70 00 4E 17 04 18 64 17 E6 1D B0 10 5E 14
!81E0 DE 10 DC 19 D5 1A E4 15 37 1A 63 1B 69 1B CF 1B
!81F0 E9 1B B2 14 55 1C 8B 13 82 11 25 14 9A 13 AB 13
!8200 EE 1C 81 1D BB 13 EB 13 F5 13 C5 4E 44 C6 4F 52
!8210 CE 45 58 54 C4 41 54 41 C9 4E 50 55 54 C4 49 4D
!8220 D2 45 41 44 CC 45 54 C7 4F 54 4F D2 55 4E C9 46
!8230 D2 45 53 54 4F 52 45 C7 4F 53 55 42 D2 45 54 55
!8240 52 4E D2 45 4D D3 54 4F 50 CF 55 54 CF 4E CE 55
!8250 4C 4C D7 41 49 54 C4 45 46 D0 4F 4B 45 C4 4F 4B
!8260 45 CC 49 4E 45 53 C3 4C 53 D7 49 44 54 48 CD 4F
!8270 4E 49 54 4F 52 D2 45 53 45 54 D0 52 49 4E 54 C3
!8280 4F 4E 54 CC 49 53 54 C3 4C 45 41 52 C8 4C 4F 41
!8290 44 CE 45 57 D4 41 42 28 D4 4F C6 4E D3 50 43 28
!82A0 D4 48 45 4E CE 4F 54 D3 54 45 50 AB AD AA AF DE
!82B0 C1 4E 44 CF 52 BE BD BC D3 47 4E C9 4E 54 C1 42
!82C0 53 D5 53 52 C6 52 45 C9 4E 50 D0 4F 53 D3 51 52
!82D0 D2 4E 44 CC 4F 47 C5 58 50 C3 4F 53 D3 49 4E D4
!82E0 41 4E C1 54 4E D0 45 45 4B C4 45 45 4B CC 45 4E
!82F0 D3 54 52 24 D6 41 4C C1 53 43 C3 48 52 24 C8 45
!8300 58 24 C2 49 4E 24 CC 45 46 54 24 D2 49 47 48 54
!8310 24 CD 49 44 24 80 99 08 8D 07 9B 0C F0 09 9A 0B
!8320 F0 0E C9 0B 07 0A AA 09 8D 09 97 0A 5E 08 99 09
!8330 CB 09 F2 09 97 08 6A 14 79 0A D8 08 70 14 E6 10
!8340 B9 14 60 1C 46 1C 38 1C 3E 1C 35 1C 59 00 BB 0A
!8350 C5 08 04 07 44 09 77 1C 00 05 79 B6 18 79 D7 14
!8360 7C 23 16 7C 8E 16 7F ED 19 50 44 0E 46 43 0E 4E
!8370 46 53 4E 52 47 4F 44 46 43 4F 56 4F 4D 55 4C 42
!8380 53 44 44 2F 30 49 44 54 4D 4F 53 4C 53 53 54 43
!8390 4E 55 46 4D 4F 48 58 42 4E C3 DD 00 C3 16 09 D3
!83A0 00 C9 D6 00 6F 7C DE 00 67 78 DE 00 47 3E 00 C9
!83B0 00 00 00 35 4A CA 99 39 1C 76 98 22 95 B3 98 0A
!83C0 DD 47 98 53 D1 99 99 0A 1A 9F 98 65 BC CD 98 D6
!83D0 77 3E 98 52 C7 4F 80 DB 00 C9 01 FF 1C 00 00 14
!83E0 00 14 00 00 00 00 00 C3 39 06 37 1F FE FF D4 1E
!83F0 03 20 45 72 72 6F 72 00 20 69 6E 20 00 4F 6B 0D
!8400 0A 00 00 42 72 65 61 6B 00 21 04 00 39 7E 23 FE
!8410 81 C0 4E 23 46 23 E5 69 60 7A B3 EB CA AB 03 EB
!8420 7C 92 20 02 7D 93 01 0D 00 E1 C8 09 C3 92 03 CD
!8430 D1 03 C5 E3 C1 7C 92 20 02 7D 93 7E 02 C8 0B 2B
!8440 C3 BA 03 E5 2A B4 1E 06 00 09 09 3E E5 3E D0 95
!8450 6F 3E FF 9C DA E0 03 67 39 E1 D8 1E 0C C3 FF 03
!8460 2A A3 1E 22 36 1E 1E 02 01 1E 14 01 1E 00 01 1E
!8470 12 01 1E 22 01 1E 0A 01 1E 18 CD 26 05 32 28 1E
!8480 CD 0C 0B 21 F4 02 57 3E 3F CD C7 06 19 7E CD C7
!8490 06 CD 4F 08 CD C7 06 21 76 03 CD 02 12 2A 36 1E
!84A0 11 FE FF 7C 92 20 02 7D 93 CA 5A 00 7C A5 3C C4
!84B0 C7 18 3E C1 AF 32 28 1E CD 0C 0B 21 82 03 CD 02
!84C0 12 21 FF FF 22 36 1E CD 31 1E DA 46 04 CD 4F 08
!84D0 3C 3D CA 46 04 F5 CD 1B 09 D5 CD 50 05 47 D1 F1
!84E0 D2 2F 08 D5 C5 AF 32 A6 1E CD 4F 08 B7 F5 CD DD
!84F0 04 DA 7F 04 F1 F5 CA C6 09 B7 C5 D2 99 04 EB 2A
!8500 B0 1E 1A 02 03 13 7C 92 20 02 7D 93 C2 87 04 60
!8510 69 22 B0 1E D1 F1 CA C0 04 2A B0 1E E3 C1 09 E5
!8520 CD B4 03 E1 22 B0 1E EB 74 D1 23 23 73 23 72 23
!8530 11 3B 1E 1A 77 23 13 B7 C2 B8 04 CD 0C 05 23 EB
!8540 62 6B 7E 23 B6 CA 46 04 23 23 23 AF BE 23 C2 D1
!8550 04 EB 73 23 72 C3 C5 04 2A 38 1E 44 4D 7E 23 B6
!8560 2B C8 23 23 7E 23 66 6F 7C 92 20 02 7D 93 60 69
!8570 7E 23 66 6F 3F C8 3F D0 C3 E0 04 C0 2A 38 1E AF
!8580 77 23 77 23 22 B0 1E 2A 38 1E 2B 22 A8 1E 2A 89
!8590 1E 22 9D 1E AF CD 5E 08 2A B0 1E 22 B2 1E 22 B4
!85A0 1E C1 2A 34 1E F9 21 8D 1E 22 8B 1E AF 6F 67 22
!85B0 AE 1E 32 A5 1E 22 B8 1E E5 C5 2A A8 1E C9 3E 3F
!85C0 CD C7 06 3E 20 CD C7 06 C3 31 1E AF 32 88 1E 0E
!85D0 05 11 3B 1E 7E FE 20 CA D8 05 47 FE 22 CA F8 05
!85E0 B7 CA FF 05 3A 88 1E B7 7E C2 D8 05 FE 3F 3E 9C
!85F0 CA D8 05 7E FE 30 DA 83 05 FE 3C DA D8 05 D5 11
!8600 8E 01 C5 01 D4 05 C5 06 7F 7E FE 61 DA 9C 05 FE
!8610 7B D2 9C 05 E6 5F 77 4E EB 23 B6 F2 9E 05 04 7E
!8620 E6 7F C8 B9 C2 9E 05 EB E5 13 1A B7 FA D0 05 4F
!8630 78 FE 88 C2 BF 05 CD 4F 08 2B 23 7E FE 61 DA C8
!8640 05 E6 5F B9 CA AE 05 E1 C3 9C 05 48 F1 EB C9 EB
!8650 79 C1 D1 23 12 13 0C D6 3A CA E6 05 FE 49 C2 E9
!8660 05 32 88 1E D6 54 C2 59 05 47 7E B7 CA FF 05 B8
!8670 CA D8 05 23 12 0C 13 C3 EF 05 21 3A 1E 12 13 12
!8680 13 12 C9 3A 27 1E B7 3E 00 32 27 1E C2 1C 06 05
!8690 CA 31 1E CD C7 06 3E 05 2B CA 30 06 7E CD C7 06
!86A0 C3 42 06 05 2B CD C7 06 C2 42 06 CD C7 06 CD 19
!86B0 0B C3 31 1E 21 3B 1E 06 01 AF 32 27 1E CD F5 06
!86C0 4F FE 7F CA 08 06 3A 27 1E B7 CA 5B 06 3E 00 CD
!86D0 C7 06 AF 32 27 1E 79 FE 07 CA 9F 06 FE 03 CC 19
!86E0 0B 37 C8 FE 0D CA 14 0B FE 15 CA 33 06 FE 40 CA
!86F0 30 06 FE 5F CA 28 06 FE 08 CA 28 06 FE 12 C2 9A
!8700 06 C5 D5 E5 36 00 CD EF 06 21 3B 1E CD 02 12 E1
!8710 D1 C1 C3 42 06 FE 20 DA 42 06 78 FE 49 3E 07 D2
!8720 B4 06 79 71 32 A6 1E 23 04 CD C7 06 C3 42 06 CD
!8730 C7 06 3E 08 C3 AE 06 7E E3 BE 23 E3 CA 4F 08 C3
!8740 EB 03 F5 3A 28 1E B7 C2 3A 12 F1 C5 F5 FE 20 DA
!8750 EB 06 3A 25 1E 47 3A 85 1E 04 CA E7 06 05 B8 CC
!8760 19 0B 3C 32 85 1E F1 C1 CF C9 CD C7 06 C3 19 0B
!8770 D7 E6 7F FE 0F C0 3A 28 1E 2F 32 28 1E AF C9 CD
!8780 1B 09 C0 C1 CD DD 04 C5 CD 5A 07 E1 4E 23 46 23
!8790 78 B1 CA 39 04 CD 63 07 CD 79 08 C5 CD 19 0B 5E
!87A0 23 56 23 E5 EB CD CF 18 3E 20 E1 CD C7 06 7E B7
!87B0 23 CA 10 07 F2 30 07 D6 7F 4F 11 8F 01 1A 13 B7
!87C0 F2 42 07 0D C2 42 07 E6 7F CD C7 06 1A 13 B7 F2
!87D0 4C 07 C3 33 07 E5 2A 2B 1E 22 29 1E E1 C9 E5 D5
!87E0 2A 29 1E 11 FF FF ED 5A 22 29 1E D1 E1 F0 E5 2A
!87F0 2B 1E 22 29 1E D7 FE 03 CA 84 07 E1 C3 63 07 2A
!8800 2B 1E 22 29 1E C3 E0 00 3E 64 32 A5 1E CD 07 0A
!8810 C1 E5 CD F0 09 22 A1 1E 21 02 00 39 CD 92 03 D1
!8820 C2 C1 07 09 D5 2B 56 2B 5E 23 23 E5 2A A1 1E 7C
!8830 92 C2 BB 07 7D 93 E1 C2 A1 07 D1 F9 EB 0E 08 CD
!8840 C8 03 E5 2A A1 1E E3 E5 2A 36 1E E3 CD F9 0C CD
!8850 BC 06 A3 CD F6 0C ED 5B BE 1E ED 4B C0 1E C5 D5
!8860 01 00 81 51 5A 7E FE A8 3E 01 C2 03 08 CD 4F 08
!8870 CD F6 0C ED 5B BE 1E ED 4B C0 1E CD 3F 17 C5 D5
!8880 F5 33 E5 2A A8 1E E3 06 81 C5 33 CD 79 08 22 A8
!8890 1E 7E FE 3A CA 2F 08 B7 C2 EB 03 23 7E 23 B6 CA
!88A0 A1 08 23 5E 23 56 ED 53 36 1E CD 4F 08 11 10 08
!88B0 D5 C8 D6 80 DA 07 0A FE 22 D2 EB 03 07 4F 06 00
!88C0 EB 21 9B 02 09 4E 23 46 C5 EB 23 7E FE 3A D0 FE
!88D0 20 28 F7 FE 30 3F 3C 3D C9 EB 2A 38 1E CA 73 08
!88E0 EB CD 1B 09 E5 CD DD 04 60 69 D1 D2 C6 09 2B 22
!88F0 B6 1E EB C9 DF B7 C8 D7 FE 1B 28 11 FE 03 28 0D
!8900 FE 13 C0 D7 FE 11 C8 FE 03 28 07 18 F6 3E FF 32
!8910 30 1E C0 F6 C0 22 A8 1E 21 F6 FF C1 2A 36 1E F5
!8920 7D A4 3C CA B4 08 22 AC 1E 2A A8 1E 22 AE 1E AF
!8930 32 28 1E CD 0C 0B F1 21 88 03 C2 1F 04 C3 39 04
!8940 2A AE 1E 7C B5 1E 20 CA FF 03 EB 2A AC 1E 22 36
!8950 1E EB C9 CD A1 14 C0 32 24 1E C9 E5 2A 2D 1E 06
!8960 00 4F 09 22 2D 1E E1 C9 7E FE 41 D8 FE 5B 3F C9
!8970 CD 4F 08 CD F6 0C CD 3F 17 FA 16 09 3A C1 1E FE
!8980 90 DA D4 17 01 80 90 11 00 00 E5 CD A7 17 E1 51
!8990 C8 1E 08 C3 FF 03 2B 11 00 00 CD 4F 08 D0 E5 F5
!89A0 21 98 19 7C 92 C2 2F 09 7D 93 DA EB 03 62 6B 19
!89B0 29 19 29 F1 D6 30 5F 16 00 19 EB E1 C3 1F 09 CA
!89C0 10 05 CD F8 08 2B CD 4F 08 E5 2A 89 1E CA 67 09
!89D0 E1 CD BC 06 2C D5 CD F8 08 2B CD 4F 08 C2 EB 03
!89E0 E3 EB 7D 93 5F 7C 9A 57 DA E0 03 E5 2A B0 1E 01
!89F0 28 00 09 7C 92 20 02 7D 93 D2 E0 03 EB 22 34 1E
!8A00 E1 22 89 1E E1 C3 10 05 CA 0C 05 CD 10 05 01 10
!8A10 08 C3 A9 09 0E 03 CD C8 03 C1 E5 E5 2A 36 1E E3
!8A20 3E 8C F5 33 C5 CD 1B 09 CD F2 09 E5 2A 36 1E 7C
!8A30 92 20 02 7D 93 E1 23 DC E0 04 D4 DD 04 60 69 2B
!8A40 D8 1E 0E C3 FF 03 C0 16 FF CD 8E 03 F9 FE 8C 1E
!8A50 04 C2 FF 03 E1 22 36 1E 23 7C B5 C2 EA 09 3A A6
!8A60 1E B7 C2 38 04 21 10 08 E3 3E E1 01 3A 0E 00 06
!8A70 00 79 48 47 7E B7 C8 B8 C8 23 FE 22 CA F6 09 C3
!8A80 F9 09 CD F5 0E CD BC 06 B1 D5 3A 87 1E F5 CD 08
!8A90 0D F1 E3 22 A8 1E 1F CD FB 0C CA 69 0A E5 2A BE
!8AA0 1E E5 23 23 5E 23 56 2A 38 1E 7C 92 20 02 7D 93
!8AB0 D2 52 0A 2A 34 1E 7C 92 20 02 7D 93 D1 D2 5A 0A
!8AC0 21 99 1E 7C 92 20 02 7D 93 D2 5A 0A 3E D1 CD 77
!8AD0 13 EB CD 92 11 CD 77 13 E1 EB ED A0 ED A0 ED A0
!8AE0 ED A0 E1 C9 E5 11 BE 1E EB ED A0 ED A0 ED A0 ED
!8AF0 A0 D1 E1 C9 CD A1 14 7E 47 FE 8C CA 88 0A CD BC
!8B00 06 88 2B 4B 0D 78 CA 37 08 CD 1C 09 FE 2C C0 C3
!8B10 89 0A CD 08 0D 7E FE 88 CA A5 0A CD BC 06 A6 2B
!8B20 CD F9 0C CD 3F 17 CA F2 09 CD 4F 08 DA AA 09 C3
!8B30 36 08 2B CD 4F 08 CA 19 0B C8 FE A2 CA 4C 0B FE
!8B40 A5 CA 4C 0B E5 FE 2C CA 35 0B FE 3B CA 6F 0B C1
!8B50 CD 08 0D E5 3A 87 1E B7 C2 05 0B CD DA 18 CD B6
!8B60 11 36 20 2A BE 1E 34 2A BE 1E 3A 25 1E 47 04 CA
!8B70 01 0B 04 3A 85 1E 86 3D B8 D4 19 0B CD 05 12 AF
!8B80 C4 05 12 E1 C3 B7 0A 3A 85 1E B7 C8 C3 19 0B 36
!8B90 00 21 3A 1E 3E 0D CD C7 06 3E 0A CD C7 06 AF 32
!8BA0 85 1E 3A 24 1E 3D C8 F5 AF CD C7 06 F1 C3 2A 0B
!8BB0 3A 26 1E 47 3A 85 1E B8 D4 19 0B D2 6F 0B D6 0E
!8BC0 D2 43 0B 2F C3 64 0B F5 CD 9E 14 CD BC 06 29 2B
!8BD0 F1 D6 A5 E5 CA 5F 0B 3A 85 1E 2F 83 D2 6F 0B 3C
!8BE0 47 3E 20 CD C7 06 05 C2 68 0B E1 CD 4F 08 C3 BE
!8BF0 0A 3F 52 65 64 6F 20 66 72 6F 6D 20 73 74 61 72
!8C00 74 0D 0A 00 3A A7 1E B7 C2 E5 03 C1 21 76 0B CD
!8C10 02 12 C3 3F 05 CD 63 11 7E FE 22 3E 00 32 28 1E
!8C20 C2 B4 0B CD B7 11 CD BC 06 3B E5 CD 05 12 3E E5
!8C30 CD 43 05 C1 DA 9E 08 23 7E B7 2B C5 CA EF 09 36
!8C40 2C C3 CE 0B E5 2A B6 1E F6 AF 32 A7 1E E3 C3 DA
!8C50 0B CD BC 06 2C CD F5 0E E3 D5 7E FE 2C CA 02 0C
!8C60 3A A7 1E B7 C2 78 0C 3E 3F CD C7 06 CD 43 05 D1
!8C70 C1 DA 9E 08 23 7E B7 2B C5 CA EF 09 D5 3A 87 1E
!8C80 B7 CA 2C 0C CD 4F 08 57 47 FE 22 CA 20 0C 3A A7
!8C90 1E B7 57 CA 1D 0C 16 3A 06 2C 2B CD BA 11 EB 21
!8CA0 40 0C E3 D5 C3 22 0A CD 4F 08 CD 37 18 E3 11 BE
!8CB0 1E EB ED A0 ED A0 ED A0 ED A0 E1 2B CD 4F 08 CA
!8CC0 4C 0C FE 2C C2 89 0B E3 2B CD 4F 08 C2 D6 0B D1
!8CD0 3A A7 1E B7 EB C2 74 08 D5 B6 21 67 0C C4 02 12
!8CE0 E1 C9 3F 45 78 74 72 61 20 69 67 6E 6F 72 65 64
!8CF0 0D 0A 00 CD F0 09 B7 C2 90 0C 23 7E 23 B6 1E 06
!8D00 CA FF 03 23 5E 23 56 ED 53 A3 1E CD 4F 08 FE 83
!8D10 C2 78 0C C3 02 0C 11 00 00 C4 F5 0E 22 A8 1E CD
!8D20 8E 03 C2 F1 03 F9 D5 7E 23 F5 D5 11 BE 1E ED A0
!8D30 ED A0 ED A0 ED A0 E3 E5 CD CD 14 D1 21 BE 1E ED
!8D40 A0 ED A0 ED A0 ED A0 E1 CD 89 17 E5 CD A7 17 E1
!8D50 C1 90 CD 89 17 CA E6 0C EB 22 36 1E 69 60 C3 0C
!8D60 08 F9 2A A8 1E 7E FE 2C C2 10 08 CD 4F 08 CD 9E
!8D70 0C CD 08 0D F6 37 3A 87 1E 8F B7 E8 C3 FD 03 CD
!8D80 BC 06 28 2B 16 00 D5 0E 01 CD C8 03 CD 82 0D 22
!8D90 AA 1E 2A AA 1E C1 78 FE 78 D4 F9 0C 7E 16 00 D6
!8DA0 B0 DA 40 0D FE 03 D2 40 0D FE 01 17 AA BA 57 DA
!8DB0 EB 03 22 9F 1E CD 4F 08 C3 24 0D 7A B7 C2 70 0E
!8DC0 7E 22 9F 1E D6 A9 D8 FE 07 D0 5F 3A 87 1E 3D B3
!8DD0 7B CA 09 13 07 83 5F 21 DF 02 19 78 56 BA D0 23
!8DE0 CD F9 0C C5 01 17 0D C5 ED 4B BE 1E C5 ED 4B C0
!8DF0 1E C5 4E 23 46 23 C5 2A 9F 1E C3 0B 0D AF 32 87
!8E00 1E CD 4F 08 1E 24 CA FF 03 DA 37 18 CD ED 08 D2
!8E10 EA 0D FE A9 CA 82 0D FE 2E CA 37 18 FE AA CA D9
!8E20 0D FE 22 CA B7 11 FE A7 CA D0 0E FE A4 CA 13 11
!8E30 FE 26 C2 CC 0D CD 4F 08 FE 48 CA 43 1D FE 42 CA
!8E40 B3 1D 1E 02 CA FF 03 D6 B3 D2 FB 0D CD 04 0D CD
!8E50 BC 06 29 C9 16 7D CD 0B 0D 2A AA 1E E5 CD 68 17
!8E60 CD F9 0C E1 C9 CD F5 0E E5 EB 22 BE 1E 3A 87 1E
!8E70 B7 CC 7D 17 E1 C9 06 00 07 4F C5 CD 4F 08 79 FE
!8E80 2F DA 22 0E CD 04 0D CD BC 06 2C CD FA 0C EB 2A
!8E90 BE 1E E3 E5 EB CD A1 14 EB E3 C3 2A 0E CD D1 0D
!8EA0 E3 11 E5 0D D5 01 59 01 09 4E 23 66 69 E9 15 FE
!8EB0 AA C8 FE 2D C8 14 FE 2B C8 FE A9 C8 2B C9 F6 AF
!8EC0 F5 CD F9 0C CD 01 09 F1 EB C1 E3 EB ED 53 BE 1E
!8ED0 ED 43 C0 1E F5 CD 01 09 F1 C1 79 21 D1 10 C2 6B
!8EE0 0E A3 4F 78 A2 E9 B3 4F 78 B2 E9 21 82 0E 3A 87
!8EF0 1E 1F 7A 17 5F 16 64 78 BA D0 C3 68 0D 84 0E 79
!8F00 B7 1F C1 D1 F5 CD FB 0C 21 C6 0E E5 CA A7 17 AF
!8F10 32 87 1E D5 CD 56 13 7E 23 23 4E 23 46 D1 C5 F5
!8F20 CD 5A 13 CD 89 17 F1 57 E1 7B B2 C8 7A D6 01 D8
!8F30 AF BB 3C D0 15 1D 0A BE 23 03 CA AE 0E 3F C3 4A
!8F40 17 3C 8F C1 A0 C6 FF 9F C3 51 17 16 5A CD 0B 0D
!8F50 CD F9 0C CD 01 09 7B 2F 4F 7A 2F CD D1 10 C1 C3
!8F60 17 0D 2B CD 4F 08 C8 CD BC 06 2C 01 E7 0E C5 F6
!8F70 AF 32 86 1E 46 CD ED 08 DA EB 03 AF 4F 32 87 1E
!8F80 CD 4F 08 DA 11 0F CD ED 08 DA 1E 0F 4F CD 4F 08
!8F90 DA 12 0F CD ED 08 D2 12 0F D6 24 C2 2D 0F 3C 32
!8FA0 87 1E 0F 81 4F CD 4F 08 3A A5 1E 3D CA E8 0F F2
!8FB0 3D 0F 7E D6 28 CA C0 0F AF 32 A5 1E E5 50 59 2A
!8FC0 B8 1E 7C 92 C2 4E 0F 7D 93 11 BA 1E CA 75 13 2A
!8FD0 B2 1E EB 2A B0 1E 7C 92 C2 62 0F 7D 93 CA 78 0F
!8FE0 79 96 23 C2 6D 0F 78 96 23 CA B2 0F 23 23 23 23
!8FF0 C3 5B 0F E1 E3 D5 11 ED 0D 7C 92 20 02 7D 93 D1
!9000 CA B5 0F E3 E5 C5 01 06 00 2A B4 1E E5 09 C1 E5
!9010 CD B4 03 E1 22 B4 1E 60 69 22 B2 1E 2B 36 00 7C
!9020 92 20 02 7D 93 C2 A1 0F D1 73 23 72 23 EB E1 C9
!9030 32 C1 1E 21 81 03 22 BE 1E E1 C9 E5 2A 86 1E E3
!9040 57 D5 C5 CD F5 08 C1 F1 EB E3 E5 EB 3C 57 7E FE
!9050 2C CA C6 0F CD BC 06 29 22 AA 1E E1 22 86 1E 1E
!9060 00 D5 11 E5 F5 2A B2 1E 3E 19 ED 5B B4 1E 7C 92
!9070 C2 FA 0F 7D 93 CA 23 10 7E B9 23 C2 05 10 7E B8
!9080 23 5E 23 56 23 C2 EE 0F 3A 86 1E B7 C2 F4 03 F1
!9090 44 4D CA 75 13 96 CA 84 10 1E 10 C3 FF 03 11 04
!90A0 00 F1 CA 16 09 71 23 70 23 4F CD C8 03 23 23 22
!90B0 9F 1E 71 23 3A 86 1E 17 79 01 0B 00 D2 46 10 C1
!90C0 03 71 23 70 23 F5 E5 CD 1D 18 EB E1 F1 3D C2 3E
!90D0 10 F5 42 4B EB 19 DA E0 03 CD D1 03 22 B4 1E 2B
!90E0 36 00 7C 92 20 02 7D 93 C2 64 10 03 57 2A 9F 1E
!90F0 5E EB 29 09 EB 2B 2B 73 23 72 23 F1 DA AC 10 47
!9100 4F 7E 23 16 E1 5E 23 56 23 E3 F5 7C 92 C2 97 10
!9110 7D 93 D2 1E 10 E5 CD 1D 18 D1 19 F1 3D 44 4D C2
!9120 89 10 29 29 C1 09 EB 2A AA 1E C9 2A B4 1E EB 21
!9130 00 00 39 3A 87 1E B7 CA CC 10 CD 56 13 CD 48 12
!9140 2A 34 1E EB 2A 9D 1E 7D 93 4F 7C 9A 41 50 1E 00
!9150 21 87 1E 73 06 90 C3 56 17 3A 85 1E 47 AF C3 D2
!9160 10 CD 71 11 CD 63 11 01 F0 09 C5 D5 CD BC 06 28
!9170 CD F5 0E E5 EB 2B 56 2B 5E E1 CD F9 0C CD BC 06
!9180 29 CD BC 06 B1 44 4D E3 71 23 70 C3 B0 11 CD 71
!9190 11 D5 CD D1 0D CD F9 0C E3 5E 23 56 23 7A B3 CA
!91A0 F7 03 7E 23 66 6F E5 2A B8 1E E3 22 B8 1E 2A BC
!91B0 1E E5 2A BA 1E E5 D5 11 BA 1E 21 BE 1E ED A0 ED
!91C0 A0 ED A0 ED A0 E1 CD F6 0C 2B CD 4F 08 C2 EB 03
!91D0 E1 22 BA 1E E1 22 BC 1E E1 22 B8 1E E1 C9 E5 2A
!91E0 36 1E 23 7C B5 E1 C0 1E 16 C3 FF 03 CD BC 06 A4
!91F0 3E 80 32 A5 1E B6 47 CD FA 0E C3 F9 0C CD F9 0C
!9200 CD DA 18 CD B6 11 CD 56 13 01 B7 13 C5 7E 23 23
!9210 E5 CD 1B 12 E1 4E 23 46 CD AA 11 E5 6F CD 49 13
!9220 D1 C9 CD 1B 12 21 99 1E E5 77 23 23 73 23 72 E1
!9230 C9 2B 06 22 50 E5 0E FF 23 7E 0C B7 CA CC 11 BA
!9240 CA CC 11 B8 C2 BD 11 FE 22 CC 4F 08 E3 23 EB 79
!9250 CD AA 11 11 99 1E 2A 8B 1E 22 BE 1E 3E 01 32 87
!9260 1E EB ED A0 ED A0 ED A0 ED A0 EB 7C 92 20 02 7D
!9270 93 22 8B 1E E1 7E C0 1E 1E C3 FF 03 23 CD B6 11
!9280 CD 56 13 CD 89 17 1C 1D C8 0A CD C7 06 FE 0D CC
!9290 23 0B 03 C3 0C 12 B7 0E F1 F5 2A 34 1E EB 2A 9D
!92A0 1E 2F 4F 06 FF 09 23 7C 92 20 02 7D 93 DA 3C 12
!92B0 22 9D 1E 23 EB F1 C9 F1 1E 1A CA FF 03 BF F5 01
!92C0 1D 12 C5 2A 89 1E 22 9D 1E 21 00 00 E5 2A 34 1E
!92D0 E5 21 8D 1E ED 5B 8B 1E 7C 92 20 02 7D 93 01 59
!92E0 12 C2 B5 12 2A B0 1E ED 5B B2 1E 7C 92 20 02 7D
!92F0 93 CA 84 12 7E 23 23 B7 CD B8 12 C3 6C 12 C1 ED
!9300 5B B4 1E 7C 92 20 02 7D 93 CA E4 12 CD 89 17 7B
!9310 E5 09 B7 F2 83 12 22 9F 1E E1 4E 06 00 09 09 23
!9320 ED 5B 9F 1E 7C 92 20 02 7D 93 CA 84 12 01 A5 12
!9330 C5 F6 80 7E 23 23 5E 23 56 23 F0 B7 C8 44 4D 2A
!9340 9D 1E 7C 92 20 02 7D 93 60 69 D8 E1 E3 7C 92 20
!9350 02 7D 93 E3 E5 60 69 D0 C1 F1 F1 E5 D5 C5 C9 D1
!9360 E1 7D B4 C8 2B 46 2B 4E E5 2B 2B 6E 26 00 09 50
!9370 59 2B 44 4D 2A 9D 1E CD B7 03 E1 71 23 70 69 60
!9380 2B C3 4B 12 C5 E5 2A BE 1E E3 CD 82 0D E3 CD FA
!9390 0C 7E E5 2A BE 1E E5 86 1E 1C DA FF 03 CD A7 11
!93A0 D1 CD 5A 13 E3 CD 59 13 E5 2A 9B 1E EB CD 40 13
!93B0 CD 40 13 21 14 0D E3 E5 C3 D8 11 E1 E3 7E 23 23
!93C0 4E 23 46 6F 2C 2D C8 0A 12 03 13 C3 4A 13 CD FA
!93D0 0C 2A BE 1E EB CD 77 13 EB C0 D5 50 59 1B 4E 2A
!93E0 9D 1E 7C 92 20 02 7D 93 C2 75 13 47 09 22 9D 1E
!93F0 E1 C9 2A 8B 1E 2B 46 2B 4E 2B 2B 7C 92 20 02 7D
!9400 93 C0 22 8B 1E C9 01 E1 10 C5 CD 53 13 AF 57 32
!9410 87 1E 7E B7 C9 01 E1 10 C5 CD 8F 13 CA 16 09 23
!9420 23 5E 23 56 1A C9 3E 01 CD A7 11 CD A4 14 2A 9B
!9430 1E 73 C1 C3 D8 11 CD 54 14 AF E3 4F E5 7E B8 DA
!9440 C9 13 78 11 0E 00 C5 CD 1B 12 C1 E1 E5 23 23 46
!9450 23 66 68 06 00 09 44 4D CD AA 11 6F CD 49 13 D1
!9460 CD 5A 13 C3 D8 11 CD 54 14 D1 D5 1A 90 C3 BF 13
!9470 EB 7E CD 59 14 04 05 CA 16 09 C5 1E FF FE 29 CA
!9480 0E 14 CD BC 06 2C CD A1 14 CD BC 06 29 F1 E3 01
!9490 C1 13 C5 3D BE 06 00 D0 4F 7E 91 BB 47 D8 43 C9
!94A0 CD 8F 13 CA 4A 15 5F 23 23 7E 23 66 6F E5 19 46
!94B0 72 E3 C5 7E FE 24 C2 43 14 CD 43 1D 18 0D FE 25
!94C0 C2 4D 14 CD B3 1D 18 03 CD 37 18 C1 E1 70 C9 EB
!94D0 CD BC 06 29 C1 D1 C5 43 C9 CD A4 14 32 22 1E CD
!94E0 21 1E C3 E1 10 CD 8E 14 C3 E9 1D CD 8E 14 F5 1E
!94F0 00 2B CD 4F 08 CA 84 14 CD BC 06 2C CD A1 14 C1
!9500 CD 21 1E AB A0 CA 85 14 C9 CD A1 14 32 22 1E 32
!9510 EA 1D CD BC 06 2C C3 A1 14 CD 4F 08 CD F6 0C CD
!9520 FB 08 7A B7 C2 16 09 2B CD 4F 08 7B C9 CD 01 09
!9530 1A C3 E1 10 CD F6 0C CD 01 09 D5 CD BC 06 2C CD
!9540 A1 14 D1 12 C9 21 C1 19 CD 89 17 C3 DC 14 CD 89
!9550 17 21 C1 D1 CD 68 17 78 B7 C8 3A C1 1E B7 CA 79
!9560 15 90 D2 FE 14 2F 3C 2A BE 1E E5 2A C0 1E E5 ED
!9570 53 BE 1E ED 43 C0 1E C1 D1 FE 19 D0 F5 CD 92 17
!9580 67 F1 CD AF 15 B4 21 BE 1E F2 24 15 CD 8F 15 D2
!9590 6A 15 23 34 CA FA 03 2E 01 CD C5 15 C3 6A 15 AF
!95A0 90 47 7E 9B 5F 23 7E 9A 57 23 7E 99 4F DC 9B 15
!95B0 68 63 AF 47 79 B7 C2 57 15 4A 54 65 6F 78 D6 08
!95C0 FE E0 C2 38 15 AF 32 C1 1E C9 05 29 7A 17 57 79
!95D0 8F 4F F2 4F 15 78 5C 45 B7 CA 6A 15 21 C1 1E 86
!95E0 77 D2 4A 15 C8 78 21 C1 1E B7 FC 82 15 46 23 7E
!95F0 E6 80 A9 4F ED 53 BE 1E ED 43 C0 1E C9 1C C0 14
!9600 C0 0C C0 0E 80 34 C0 C3 FA 03 7E 83 5F 23 7E 8A
!9610 57 23 7E 89 4F C9 21 C2 1E 7E 2F 77 AF 6F 90 47
!9620 7D 9B 5F 7D 9A 57 7D 99 4F C9 06 00 D6 08 DA BE
!9630 15 43 5A 51 0E 00 C3 B1 15 C6 09 6F AF 2D C8 79
!9640 1F 4F 7A 1F 57 7B 1F 5F 78 1F 47 C3 C1 15 00 00
!9650 00 81 03 AA 56 19 80 F1 22 76 80 45 AA 38 82 CD
!9660 3F 17 B7 EA 16 09 21 C1 1E 7E 01 35 80 11 F3 04
!9670 90 F5 70 D5 C5 CD DC 14 C1 D1 04 CD 90 16 21 D3
!9680 15 CD D3 14 21 D7 15 CD 98 1A 01 80 80 11 00 00
!9690 CD DC 14 F1 CD AB 18 01 31 80 11 18 72 21 C1 D1
!96A0 CD 3F 17 C8 2E 00 CD F8 16 79 32 D0 1E EB 22 D1
!96B0 1E 01 00 00 50 58 21 35 15 E5 21 47 16 E5 E5 21
!96C0 BE 1E 7E 23 B7 CA 73 16 E5 2E 08 1F 67 79 D2 61
!96D0 16 E5 2A D1 1E 19 EB E1 3A D0 1E 89 1F 4F 7A 1F
!96E0 57 7B 1F 5F 78 1F 47 2D 7C C2 50 16 E1 C9 43 5A
!96F0 51 4F C9 2A BE 1E E5 2A C0 1E E5 01 20 84 11 00
!9700 00 ED 53 BE 1E ED 43 C0 1E C1 D1 CD 3F 17 CA EE
!9710 03 2E FF CD F8 16 34 34 2B 7E 32 F5 1D 2B 7E 32
!9720 F1 1D 2B 7E 32 ED 1D 41 EB AF 4F 57 5F 32 F8 1D
!9730 E5 C5 7D CD EC 1D DE 00 3F D2 C8 16 32 F8 1D F1
!9740 F1 37 D2 C1 E1 79 3C 3D 1F FA 6B 15 17 7B 17 5F
!9750 7A 17 57 79 17 4F 29 78 17 47 3A F8 1D 17 32 F8
!9760 1D 79 B2 B3 C2 B5 16 E5 21 C1 1E 35 E1 C2 B5 16
!9770 C3 FA 03 78 B7 CA 1C 17 7D 21 C1 1E AE 80 47 1F
!9780 A8 78 F2 1B 17 C6 80 77 CA 75 13 CD 92 17 77 2B
!9790 C9 CD 3F 17 2F E1 B7 E1 F2 4A 15 C3 FA 03 ED 5B
!97A0 BE 1E ED 4B C0 1E 78 B7 C8 C6 02 DA FA 03 47 CD
!97B0 DC 14 21 C1 1E 34 C0 C3 FA 03 3A C1 1E B7 C8 3A
!97C0 C0 1E FE 2F 17 9F C0 3C C9 CD 3F 17 06 88 11 00
!97D0 00 21 C1 1E 4F 70 06 00 23 36 80 17 C3 32 15 CD
!97E0 3F 17 F0 21 C0 1E 7E EE 80 77 C9 EB 2A BE 1E E3
!97F0 E5 2A C0 1E E3 E5 EB C9 11 BE 1E ED A0 ED A0 ED
!9800 A0 ED A0 C9 5E 23 56 23 4E 23 46 23 C9 21 C0 1E
!9810 7E 07 37 1F 77 3F 1F 23 23 77 79 07 37 1F 4F 1F
!9820 AE C9 78 B7 CA 3F 17 21 48 17 E5 CD 3F 17 79 C8
!9830 21 C0 1E AE 79 F8 CD C1 17 1F A9 C9 23 78 BE C0
!9840 2B 79 BE C0 2B 7A BE C0 2B 7B 96 C0 E1 E1 C9 47
!9850 4F 57 5F B7 C8 E5 ED 5B BE 1E ED 4B C0 1E CD 92
!9860 17 AE 67 FC FD 17 3E 98 90 CD AF 15 7C 17 DC 82
!9870 15 06 00 DC 9B 15 E1 C9 1B 7A A3 3C C0 0B C9 21
!9880 C1 1E 7E FE 98 3A BE 1E D0 7E CD D4 17 36 98 7B
!9890 F5 79 17 CD 32 15 F1 C9 21 00 00 78 B1 C8 78 06
!98A0 10 29 DA 1E 10 CB 11 17 D2 34 18 19 DA 1E 10 10
!98B0 F0 C9 FE 2D F5 CA 43 18 FE 2B CA 43 18 2B CD 4A
!98C0 15 47 57 5F 2F 4F CD 4F 08 DA 94 18 FE 2E CA 6F
!98D0 18 FE 45 C2 73 18 CD 4F 08 CD 33 0E CD 4F 08 DA
!98E0 BB 18 14 C2 73 18 AF 93 5F 0C 0C CA 4B 18 E5 7B
!98F0 90 F4 8C 18 F2 82 18 F5 CD 78 16 F1 3C C2 76 18
!9900 D1 F1 CC 68 17 EB C9 C8 F5 CD 23 17 F1 3D C9 D5
!9910 57 78 89 47 C5 E5 D5 CD 23 17 F1 D6 30 CD AB 18
!9920 E1 C1 D1 C3 4B 18 2A BE 1E E5 2A C0 1E E5 CD 51
!9930 17 C1 D1 C3 DC 14 7B 07 07 83 07 86 D6 30 5F C3
!9940 61 18 E5 21 7D 03 CD 02 12 E1 EB AF 06 98 CD 56
!9950 17 21 01 12 E5 21 C3 1E E5 CD 3F 17 36 20 F2 E8
!9960 18 36 2D 23 36 30 CA AC 19 E5 FC 68 17 AF F5 CD
!9970 B2 19 01 43 91 11 F8 4F CD A7 17 B7 E2 15 19 F1
!9980 CD 8D 18 F5 C3 F7 18 CD 78 16 F1 3C F5 CD B2 19
!9990 CD CA 14 3C CD D4 17 ED 53 BE 1E ED 43 C0 1E 01
!99A0 06 03 F1 81 3C FA 36 19 FE 08 D2 36 19 3C 47 3E
!99B0 02 3D 3D E1 F5 11 C5 19 05 C2 47 19 36 2E 23 36
!99C0 30 23 05 36 2E CC 90 17 C5 E5 EB ED 5B BE 1E ED
!99D0 4B C0 1E 06 2F 04 7B 96 5F 23 7A 9E 57 23 79 9E
!99E0 4F 2B 2B D2 5A 19 CD 8F 15 23 ED 53 BE 1E ED 43
!99F0 C0 1E EB E1 70 23 C1 0D C2 47 19 05 CA 90 19 2B
!9A00 7E FE 30 CA 84 19 FE 2E C4 90 17 F1 CA AF 19 36
!9A10 45 23 36 2B F2 A0 19 36 2D 2F 3C 06 2F 04 D6 0A
!9A20 D2 A2 19 C6 3A 23 70 23 77 23 71 E1 C9 01 74 94
!9A30 11 F7 23 CD A7 17 B7 E1 E2 0C 19 E9 00 00 00 80
!9A40 A0 86 01 10 27 00 E8 03 00 64 00 00 0A 00 00 01
!9A50 00 00 21 68 17 E3 E9 CD 70 17 21 C1 19 11 BE 1E
!9A60 ED A0 ED A0 ED A0 ED A0 C1 D1 CD 3F 17 78 CA 37
!9A70 1A F2 FD 19 B7 CA EE 03 B7 CA 4B 15 D5 C5 79 F6
!9A80 7F ED 5B BE 1E ED 4B C0 1E F2 1F 1A D5 C5 CD 04
!9A90 18 C1 D1 F5 CD A7 17 E1 7C 1F E1 22 C0 1E E1 22
!9AA0 BE 1E DC D7 19 CC 68 17 D5 C5 CD E4 15 C1 D1 CD
!9AB0 25 16 CD 70 17 01 38 81 11 3B AA CD 25 16 3A C1
!9AC0 1E FE 88 D2 16 17 CD 04 18 C6 80 C6 02 DA 16 17
!9AD0 F5 21 D3 15 CD CD 14 CD 1C 16 F1 C1 D1 F5 CD D9
!9AE0 14 CD 68 17 21 77 1A CD AC 1A 11 00 00 C1 4A C3
!9AF0 25 16 08 40 2E 94 74 70 4F 2E 77 6E 02 88 7A E6
!9B00 A0 2A 7C 50 AA AA 7E FF FF 7F 7F 00 00 80 81 00
!9B10 00 00 81 CD 70 17 11 23 16 D5 E5 ED 5B BE 1E ED
!9B20 4B C0 1E CD 25 16 E1 CD 70 17 7E 23 11 BE 1E ED
!9B30 A0 ED A0 ED A0 ED A0 06 F1 C1 D1 3D C8 D5 C5 F5
!9B40 E5 CD 25 16 E1 CD 89 17 E5 CD DC 14 E1 C3 BD 1A
!9B50 CD 3F 17 21 FC 1D FA 4F 1B 21 1D 1E 11 BE 1E ED
!9B60 A0 ED A0 ED A0 ED A0 21 FC 1D C8 86 E6 07 06 00
!9B70 77 23 87 87 4F 09 CD 89 17 CD 25 16 3A FB 1D 3C
!9B80 E6 03 06 00 FE 01 88 32 FB 1D 21 53 1B 87 87 4F
!9B90 09 CD CD 14 ED 5B BE 1E ED 4B C0 1E 7B 59 EE 4F
!9BA0 4F 21 C2 1E 36 80 2B 46 36 80 21 FA 1D 34 7E D6
!9BB0 AB C2 3D 1B 77 0C 15 1C CD 35 15 11 1D 1E 21 BE
!9BC0 1E ED A0 ED A0 ED A0 ED A0 C9 77 2B 77 2B 77 C3
!9BD0 19 1B 68 B1 46 68 99 E9 92 69 10 D1 75 68 21 B2
!9BE0 1B CD CD 14 CD 70 17 01 49 83 11 DB 0F ED 53 BE
!9BF0 1E ED 43 C0 1E C1 D1 CD 90 16 CD 70 17 CD 04 18
!9C00 C1 D1 CD D9 14 21 B6 1B CD D3 14 CD 3F 17 37 F2
!9C10 9E 1B CD CA 14 CD 3F 17 B7 F5 F4 68 17 21 B6 1B
!9C20 CD CD 14 F1 D4 68 17 21 BA 1B C3 98 1A DB 0F 49
!9C30 81 00 00 00 7F 05 BA D7 1E 86 64 26 99 87 58 34
!9C40 23 87 E0 5D A5 86 DA 0F 49 83 CD 70 17 CD 69 1B
!9C50 C1 E1 CD 70 17 EB ED 53 BE 1E ED 43 C0 1E CD 63
!9C60 1B C3 8E 16 CD 3F 17 FC D7 19 FC 68 17 3A C1 1E
!9C70 FE 81 DA 06 1C 01 00 81 51 59 CD 90 16 21 D3 14
!9C80 E5 21 10 1C CD 98 1A 21 B2 1B C9 09 4A D7 3B 78
!9C90 02 6E 84 7B FE C1 2F 7C 74 31 9A 7D 84 3D 5A 7D
!9CA0 C8 7F 91 7E E4 BB 4C 7E 6C AA AA 7F 00 00 00 81
!9CB0 C3 00 00 3E 0C CF C9 ED 45 CD A1 14 7B 32 25 1E
!9CC0 C9 CD F6 0C CD 01 09 ED 53 29 1E ED 53 2B 1E C9
!9CD0 CD 01 09 D5 E1 46 23 7E C3 D2 10 CD F6 0C CD 01
!9CE0 09 D5 CD BC 06 2C CD F6 0C CD 01 09 E3 73 23 72
!9CF0 E1 C9 C0 CD 96 1C 1B 2A 89 1E AF ED 52 38 0B ED
!9D00 53 89 1E 21 CE FF 19 22 34 1E 13 ED 53 E7 1D 18
!9D10 21 D7 FE 3A 20 FB 0E 00 CD D4 1C 47 CD D4 1C 57
!9D20 CD D4 1C 5F CD D4 1C 3D 28 1A 3C C2 FD 03 C9 CD
!9D30 96 1C CD D4 1C 12 13 10 F9 CD D4 1C 79 B7 C2 7C
!9D40 1D C3 B4 1C CD D4 1C 79 B7 C2 7C 1D C3 E0 00 CD
!9D50 E5 1C 07 07 07 07 6F CD E5 1C B5 6F 81 4F 7D C9
!9D60 D7 D6 30 FE 0A D8 D6 07 C9 CD F9 0C CD 01 09 C5
!9D70 21 C3 1E 7A FE 00 28 0C CD 26 1D 78 FE 30 28 02
!9D80 70 23 71 23 7B CD 26 1D 7A FE 00 20 05 78 FE 30
!9D90 28 02 70 23 71 23 AF 77 23 77 C1 21 C3 1E C3 88
!9DA0 11 47 E6 0F FE 0A 38 02 C6 07 C6 30 4F 78 0F 0F
!9DB0 0F 0F E6 0F FE 0A 38 02 C6 07 C6 30 47 C9 EB 21
!9DC0 00 00 CD 5C 1D DA 7C 1D 18 05 CD 5C 1D 38 1F 29
!9DD0 29 29 29 B5 6F 18 F3 13 1A FE 20 CA 5C 1D D6 30
!9DE0 D8 FE 0A 38 05 D6 07 FE 0A D8 FE 10 3F C9 EB 7A
!9DF0 4B E5 CD D1 10 E1 C9 1E 26 C3 FF 03 CD F9 0C CD
!9E00 01 09 C5 21 C3 1E 06 11 05 78 FE 01 28 08 CB 13
!9E10 CB 12 30 F4 18 04 CB 13 CB 12 3E 30 CE 00 77 23
!9E20 05 20 F3 AF 77 23 77 C1 21 C3 1E C3 88 11 EB 21
!9E30 00 00 CD D0 1D DA DE 1D D6 30 29 B5 6F CD D0 1D
!9E40 30 F6 EB 7A 4B E5 CD D1 10 E1 C9 13 1A FE 20 CA
!9E50 D0 1D FE 30 D8 FE 32 3F C9 1E 28 C3 FF 03

View File

@@ -0,0 +1,89 @@
;----------------------------------------------------------------
; Terminal IN/OUT functions
;----------------------------------------------------------------
; prints out byte
; input:
; - a: byte to send
; modify:
; - af: destroy
bios_termout:
jp print_char
; reads in byte
; input:
; modify:
; - a: read byte
; - f: destroy
bios_termin:
jp read_char
; reads input status
; input:
; modify:
; - a: 0x00 if empty, 0xFF if byte is ready
; - f: destroy
bios_termsts:
jp read_in_sts
;----------------------------------------------------------------
; I2C IN/OUT functions
;----------------------------------------------------------------
; sends I2C buffer to device
; input:
; - HL contains buffer location
; - B defines amount of bytes to send
; - C contains device address
; modify:
; - af: destroy
bios_iic_send:
jp iic_send_buffer
; sends I2C buffer to device
; input:
; - HL contains buffer location
; - B defines amount of bytes to receive
; - C contains device address
; modify:
; - af: destroy
bios_iic_receive:
jp iic_receive_buffer
;----------------------------------------------------------------
; disk functions
;----------------------------------------------------------------
; selects drive 0-3
; input:
; - a contains drive number
; modify:
; - af: destroy
; - de: destroy
; - bc: destroy
; - hl: destroy
bios_disk_sel:
jp ideif_drv_sel
; gets pointer to selcetd drive information
; input:
; modify:
; - af: destroy
; - ix: pointer to start of entry
bios_disk_get:
jp ideif_get_drv_pointer
; reads from LBA address
; input:
; - a : sectro count
; - de: destination in memory
; - hl: pointer to sector value in memory (32 bit (lw))
; modify:
; - af: destroy
; - bc: destroy
; - de: destroy
; - hl: destroy
bios_disk_readlba:
jp read_lba_sector
;----------------------------------------------------------------
; filesystem functions
;----------------------------------------------------------------

View File

@@ -58,12 +58,11 @@ print_char:
print_str:
ld a, (hl)
or a
jr z,print_str_end
ret z
call print_char
inc hl
jr print_str
print_str_end:
ret
print_clear:
ld hl, [MSG_CLEAR]
@@ -118,6 +117,15 @@ read_char:
in a, (CS_SIO_A_D) ; read char if avail
ret ; return
read_in_sts:
out (CS_SIO_A_C), a ; select reg 0
in a, (CS_SIO_A_C) ; read reg 0
and 1 ; mask D0 (recieve char available)
ret z
ld a, 0xFF
ret
read_bcd;
call read_char
jp z, read_bcd

View File

@@ -46,6 +46,8 @@ MEM_FAT_EXEC_START:
dephase
;-------------------------------------
; Get FAT Root-Table position
;-------------------------------------
@@ -226,6 +228,7 @@ _fat_getfatsec_notroot:
;read FAT sector
ld hl,MEM_FAT_OF0_FATSEC ;read next sector
ld b,1
ld a,1
LD DE, MEM_IDE_BUFFER ;where to store data?
call read_lba_sector
@@ -287,6 +290,7 @@ fat_readfilesec:
;call fat_print_dbg
ld hl,[MEM_FAT_OF0_DATSEC]
ld b,1
ld a,1
;LD DE, MEM_IDE_BUFFER ;where to store data?
call read_lba_sector ;read sectore
ld hl,[MEM_FAT_OF0_DATSEC] ;increment pointer to next sector
@@ -342,6 +346,7 @@ fat_openfile_noprepare:
LD HL,MEM_IDE_POINTER ;read first sector
LD B,1
ld a,1
LD DE, MEM_IDE_BUFFER ;where to store data?
call read_lba_sector
@@ -372,6 +377,7 @@ _fat_lfs_loop_compare_next_sector:
LD HL,MEM_IDE_POINTER ;read next sector
LD B,1
ld a,1
LD DE, MEM_IDE_BUFFER ;where to store data?
call read_lba_sector

View File

@@ -13,6 +13,7 @@ fat_print_directory:
LD (MEM_FAT_COUNT1),DE
LD HL,MEM_IDE_POINTER ;read first sector
LD B,1
ld a,1
LD DE, MEM_IDE_BUFFER ;where to store data?
call read_lba_sector
@@ -112,7 +113,7 @@ _fat_print_directory_loop_next_sector: ; end fo sector. read next sector from d
LD HL,MEM_IDE_POINTER ;read next sector
LD B,1
ld a,1
LD DE, MEM_IDE_BUFFER ;where to store data?
call read_lba_sector
@@ -303,7 +304,8 @@ fat_exec:
call PRINTINLINE
db 10,13,"Loading ",0
ld hl,[var_input+6]
pop hl ;get and re-store pointer ot filename from and to stack
push hl
call print_str
call PRINTINLINE
db " to 0x",0

View File

@@ -37,6 +37,26 @@
IDE_REG_LBA2 .EQU 01101b ;High two bits of the cylinder number
IDE_REG_LBA3 .EQU 01110b ;Head and device select register
ide_wait_rdy macro
local wait
wait:
ld b, IDE_REG_CMDSTS
call ide_regread_8
rla
jr c, wait
endm
ide_wait_drq macro
local wait
wait:
ld b, IDE_REG_CMDSTS
call ide_regread_8
bit 0,a ;Error Bit set.
jp nz, ide_printerror
bit 3,a
jr z,wait
endm
;================================================================
; I/O access functions
@@ -53,7 +73,6 @@ ide_reset:
OUT (CS_PIA_CR), A ;Set Data direction to out
LD A, IDE_RST
OUT (CS_PIA_PC), A ;Reset IDE Device
NOP
XOR A
OUT (CS_PIA_PC), A ;end device reset
RET
@@ -80,11 +99,11 @@ ide_regwrite_8:
OUT (CS_PIA_PC), A ;Write Data to bit controll lines
OR IDE_WR ;Set Write bit
OUT (CS_PIA_PC), A ;Set write signal
NOP ;delay to wait for processing
;NOP ;delay to wait for processing
LD A, B ;Load register address
AND 00011111b ;Mask unused bits
OUT (CS_PIA_PC), A ;disable write signal
NOP
;NOP
XOR A ;clear register A
OUT (CS_PIA_PC), A ;clear controll lines
RET
@@ -106,15 +125,7 @@ ide_regread_8:
OUT (CS_PIA_PC), A ;Write Data to bit controll lines
OR IDE_RD ;Set Write bit
OUT (CS_PIA_PC), A ;Write Data to bit controll lines
NOP ;delay to wait for processing
PUSH AF
POP AF
PUSH AF
POP AF
PUSH AF
POP AF
PUSH AF
POP AF
NOP
IN A,(CS_PIA_PA) ;read data from ide device to b (because a is used later)
PUSH AF
XOR A ;clear register A
@@ -122,80 +133,42 @@ ide_regread_8:
POP AF ;put data in accumulator
RET
;------------------------------------------------------------------------------
; ide_readsector_256
; ide_readsector_512_fast
;
; Reads IDE Data
; Reads IDE Data until no more data is available (multiple sectors)
; HL contains destination address
; A returns 0 on success, 1 on error
;------------------------------------------------------------------------------
ide_readsector_256:
LD C,0 ;Setup counter for 256 words
ide_readsector_256_waitloop:
LD B, IDE_REG_CMDSTS
CALL ide_regread_8
BIT 0,a ;Error Bit set.
JP NZ, ide_printerror
BIT 3,a ;DRQ Bit set. If set, disk has data
JR Z, ide_readsector_256_waitloop ;If not set, wait
LD A, 10010010b ;CommandByte-A, Mode 0, PA IN, PC Out, PB IN
OUT (CS_PIA_CR), A ;Set Data direction to IN
LD A, IDE_REG_DATA ;CS0 and A=0 -> I/O register
OUT (CS_PIA_PC), A ;set register
OR IDE_RD ;Set Read bit
OUT (CS_PIA_PC), A ;Write Read to bit controll lines
NOP
;NOP
;NOP
IN A,(CS_PIA_PB) ;Load 16-Bit data to buffer
LD (HL), A
INC HL
IN A,(CS_PIA_PA)
LD (HL), A
INC HL
DEC C
RET Z
JR ide_readsector_256_waitloop
ide_readsector_512_inv:
LD C,0 ;Setup counter for 256 words
LD DE, 4096 ;Timeout counter
ide_readsector_512_inv_waitloop:
DEC DE
LD A,D
OR E
JP Z, ide_readsector_timeout
;timeout checked. continue
LD B, IDE_REG_CMDSTS
CALL ide_regread_8
BIT 0,a ;Error Bit set.
JP NZ, ide_printerror
BIT 3,a ;DRQ Bit set. If set, disk has data
JR Z, ide_readsector_512_inv_waitloop ;If not set, wait
LD DE, 2048 ;Timeout counter
LD A, 10010010b ;CommandByte-A, Mode 0, PA IN, PC Out, PB IN
OUT (CS_PIA_CR), A ;Set Data direction to IN
LD A, IDE_REG_DATA ;CS0 and A=0 -> I/O register
OUT (CS_PIA_PC), A ;set register
OR IDE_RD ;Set Read bit
OUT (CS_PIA_PC), A ;Write Read to bit controll lines
;NOP
;NOP
NOP
IN A,(CS_PIA_PA) ;Load 16-Bit data to buffer
LD (HL), A
INC HL
IN A,(CS_PIA_PB)
LD (HL), A
INC HL
DEC C
RET Z
JR ide_readsector_512_inv_waitloop
ide_readsector_512_fast:
ld b, IDE_REG_CMDSTS ;check status
call ide_regread_8
bit 0,a ;Error Bit set
jp nz, ide_printerror ;then abort
bit 3,a ;wait for drq
jr z,ide_readsector_512_fast
ld b,0 ;256x
ld a, 10010010b ;CommandByte-A, Mode 0, PA IN, PC Out, PB IN
out (CS_PIA_CR), a ;Set Data direction to IN
_ide_readsector_512_floop:
ld a, IDE_REG_DATA ;CS0 and A=0 -> I/O register
out (CS_PIA_PC), a ;set register
or IDE_RD ;Set Read bit
out (CS_PIA_PC), a ;Write Read to bit controll lines
in a,(CS_PIA_PA) ;load first byte
ld (hl), a
inc hl
in a,(CS_PIA_PB) ;load second byte
ld (hl), a
inc hl
djnz _ide_readsector_512_floop ;loop 256 times (256words = 512 bytes)
ld b, IDE_REG_CMDSTS;check drive status
call ide_regread_8 ;
and 10001001b ;busy, DRQ, or error?
ret z ;no more data or errors -> exit
bit 3,a ;test if more data available
jr nz,ide_readsector_512_fast ;if true, repeat read function
jp ide_printerror ;else exit function
ide_readsector_timeout:
LD HL, [str_error_time]
@@ -208,9 +181,6 @@ ide_readsector_timeout:
CALL print_char
RET
;------------------------------------------------------------------------------
; ide_writesector_256
;
@@ -249,7 +219,7 @@ ide_printerror:
CALL print_char
LD A,13
CALL print_char
LD A,1
RET
str_error_start:

View File

@@ -240,7 +240,7 @@ ideif_init_drive:
;ld e,a
call ide_reset
ld bc, 0x5FFF ;preload timeout counter
ld de, 0xAFFF ;preload timeout counter
_ideif_init_drive_loop:
ld b, IDE_REG_CMDSTS
call ide_regread_8 ;read drive status register
@@ -265,36 +265,50 @@ _ideif_init_drive_found:
ld a, IDE_CMD_IDENT
call ide_regwrite_8 ;Write command to drive
ld hl, MEM_IDE_BUFFER ;set read/write buffer start address
call ide_readsector_256 ;read 256 words from device
call ide_readsector_512_fast ;read 256 words from device
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
ld b,20
_ideif_init_drive_charloop:
ld a,(hl) ;load data from HL (buffer)
inc hl
ex af,af'
ld a,(hl)
inc hl
ld (de),a
inc de
ex af,af'
ld (de),a
inc de
djnz _ideif_init_drive_charloop
;get partition table
;read bootsector
ide_wait_rdy
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
ld a,0 ;read sector 0
ld b,IDE_REG_LBA0
call ide_regwrite_8
ld a,0 ;read cylinder 0
ld b,IDE_REG_LCYL
ld b,IDE_REG_LBA1
call ide_regwrite_8
ld a,0
ld b,IDE_REG_HCYL
ld b,IDE_REG_LBA2
call ide_regwrite_8
ld a,10100000b ;read head 0
ld b,IDE_REG_HEAD
ld a,11100000b ;read head 0
ld b,IDE_REG_LBA3
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
call ide_readsector_512_fast ;read 256 words from device
;prepare partitions
ld b,4 ;Partition table length
ld c,0 ;Partition ID counter
@@ -393,6 +407,9 @@ ideif_init_all:
; A contains sector count
;------------------------------------------------------------------------------
read_lba_sector:
push af
ide_wait_rdy
pop af
LD B,IDE_REG_SECTOR ;amount of sectores
CALL ide_regwrite_8
@@ -417,10 +434,10 @@ read_lba_sector:
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
EX DE,HL ;transfer destination in DE to HL
call ide_readsector_512_inv ;read 256 words from device
ret
jp ide_readsector_512_fast ;read 256 words from device
;------------------------------------------------------------------------------
; ideif_drv_sel

View File

@@ -90,6 +90,9 @@ iic_receive_buffer_err:
;Reset PIO configuration
iic_init:
;SCL HIGH, SDA HIGH
LD A,0x03
OUT (CS_PIO_AD), A
;Set port to controll mode (MODE3)
LD A,0xCF
OUT (CS_PIO_AC), A
@@ -100,6 +103,9 @@ iic_init:
; send start bit
iic_send_sbit:
;SCL HIGH, SDA HIGH
LD A,0x03
OUT (CS_PIO_AD), A
;Set port to controll mode (MODE3)
LD A,0xCF
OUT (CS_PIO_AC), A

View File

@@ -0,0 +1,63 @@
;-------------------------------------
; BIOS Routines entry points
; Do not move in memory!!!!
;-------------------------------------
.org 0x0050
B_BEEP:
jp beep
B_IICSEND:
jp iic_send_buffer
B_IICRECV:
jp iic_receive_buffer
B_PRINTCHAR:
jp print_char
B_PRINTSTR:
jp print_str
B_PRINTINLINE:
jp PRINTINLINE
B_PRINTAHEX:
jp print_a_hex
B_PRINTLN:
jp print_newLine
B_READCHAR:
jp read_char
B_KEYREAD:
ret ;placeholder -> not implemented
db 0x00, 0x00
B_KEYREADASCII:
ret ;placeholder -> not implemented
db 0x00, 0x00
B_KEYSEND:
ret ;placeholder -> not implemented
db 0x00, 0x00
B_DSKSEL:
jp ideif_drv_sel
B_FATOPEN:
jp fat_openfile
B_FATREAD:
jp fat_readfilesec
B_FATCD:
jp fat_cd_single
B_FATCREATE:
ret ;placeholder -> not implemented
db 0x00, 0x00
B_FATWRITE:
ret ;placeholder -> not implemented
db 0x00, 0x00

View File

@@ -60,7 +60,8 @@ INT_VEC:
;================================================================
mon_var_template:
phase SYS_RAM_START
interrupt_vectors:
defs 256
var_buffer_len:
defb 0
var_last_char:
@@ -100,6 +101,8 @@ mon_var_template_end:
; Start of monitor
;================================================================
org 0x0050
.include "ref.s" ;static bios calls for programs
BOOT_PHASE0: ;Setup Hardware
;Setup Stack-Pointer
ld sp, STACK_RAM_TOP
@@ -118,6 +121,11 @@ BOOT_PHASE0: ;Setup Hardware
ld (var_curseron),a
ld a, " "
ld (var_curserchar),a
;setup interrupt table
ld a,[interrupt_vectors]>>8
ld i,a
;Initialize Console (Serial-Port)
call CONSOLE_INIT
@@ -135,9 +143,7 @@ BOOT_PHASE1_LOOP:
pop hl
jp nz, BOOT_PHASE1_LOOP
;template copy done
xor a ;set dir to empty
ld (var_dir),a
ld (var_dir+1),a
BOOT_PHASE2: ;Hardware initialized.
; Print banner
@@ -156,6 +162,9 @@ BOOT_PHASE2: ;Hardware initialized.
LD BC,0x48
CALL beep
xor a ;set dir to empty
ld (var_dir),a
ld (var_dir+1),a
; Start commandline
jp COMMAND

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,28 +1,47 @@
;This file is generated by the build script.
;Do not make any changes here!
?a0000 equ 0x14A5
?a0001 equ 0x1562
ADDR_RTC equ 0xD0
A_RTS_OFF equ 0x17F
A_RTS_ON equ 0x188
BOOT_PHASE0 equ 0x50
BOOT_PHASE1 equ 0x6E
BOOT_PHASE1_LOOP equ 0x77
BOOT_PHASE2 equ 0x89
COMMAND equ 0x1915
COMMAND_BACKSPACE equ 0x1956
COMMAND_LUT equ 0x1883
COMMAND_PROCESS equ 0x197C
COMMAND_PROCESS_FOUND equ 0x19B7
COMMAND_PROCESS_LOOP equ 0x197F
COMMAND_PROCESS_LOOP_STR1 equ 0x1988
COMMAND_PROCESS_LOOP_STR2 equ 0x199E
COMMAND_PROCESS_NEXT_ENTRY equ 0x19A3
COMMAND_PROCESS_NEXT_ENTRYI equ 0x19A2
COMMAND_PROCESS_NOT_FOUND equ 0x19AE
COMMAND_READ equ 0x1927
CONSOLE_INIT equ 0xA5
CONSOLE_INIT_CTC equ 0xA5
CONSOLE_INIT_SIO equ 0xAD
A_RTS_OFF equ 0x1BE
A_RTS_ON equ 0x1C7
BOOT_PHASE0 equ 0x83
BOOT_PHASE1 equ 0xA5
BOOT_PHASE1_LOOP equ 0xAE
BOOT_PHASE2 equ 0xB9
B_BEEP equ 0x50
B_DSKSEL equ 0x71
B_FATCD equ 0x7A
B_FATCREATE equ 0x7D
B_FATOPEN equ 0x74
B_FATREAD equ 0x77
B_FATWRITE equ 0x80
B_IICRECV equ 0x56
B_IICSEND equ 0x53
B_KEYREAD equ 0x6B
B_KEYSEND equ 0x6E
B_PRINTAHEX equ 0x62
B_PRINTCHAR equ 0x59
B_PRINTINLINE equ 0x5F
B_PRINTLN equ 0x65
B_PRINTSTR equ 0x5C
B_READCHAR equ 0x68
COMMAND equ 0x1944
COMMAND_BACKSPACE equ 0x1985
COMMAND_LUT equ 0x18B2
COMMAND_PROCESS equ 0x19AB
COMMAND_PROCESS_FOUND equ 0x19E6
COMMAND_PROCESS_LOOP equ 0x19AE
COMMAND_PROCESS_LOOP_STR1 equ 0x19B7
COMMAND_PROCESS_LOOP_STR2 equ 0x19CD
COMMAND_PROCESS_NEXT_ENTRY equ 0x19D2
COMMAND_PROCESS_NEXT_ENTRYI equ 0x19D1
COMMAND_PROCESS_NOT_FOUND equ 0x19DD
COMMAND_READ equ 0x1956
CONSOLE_INIT equ 0xDC
CONSOLE_INIT_CTC equ 0xDC
CONSOLE_INIT_SIO equ 0xE4
CS_APU_CTRL equ 0xF9
CS_APU_DATA equ 0xF8
CS_BANK equ 0x00
@@ -43,18 +62,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 0x1F6
DHEX_TO_BYTE_FAILED equ 0x212
ERR_SYNTAX equ 0x19CD
EXEC_RST_08 equ 0xD96
EXEC_RST_10 equ 0xD9A
EXEC_RST_18 equ 0xDA6
HEX_TO_BIN equ 0x216
HEX_TO_BIN_2 equ 0x224
HEX_TO_INVALID_2 equ 0x22B
DHEX_TO_BYTE equ 0x235
DHEX_TO_BYTE_FAILED equ 0x251
ERR_SYNTAX equ 0x19FC
EXEC_RST_08 equ 0xDD5
EXEC_RST_10 equ 0xDD9
EXEC_RST_18 equ 0xDE5
HEX_TO_BIN equ 0x255
HEX_TO_BIN_2 equ 0x263
HEX_TO_INVALID_2 equ 0x26A
IDE_CMD_IDENT equ 0xEC
IDE_CMD_READSEC equ 0x20
IDE_DEV_TABLE equ 0x12FA
IDE_DEV_TABLE equ 0x1307
IDE_RD equ 0x40
IDE_REG_ALTSTS equ 0x16
IDE_REG_CMDSTS equ 0x0F
@@ -96,67 +115,67 @@ IO_RTC_SEC1 equ 0x21
IO_RTC_WEEK equ 0x2C
IO_RTC_YEAR1 equ 0x2B
IO_RTC_YERR0 equ 0x2A
MEM_FAT_AMOUNT equ 0x43B8
MEM_FAT_CLUSTERLEN equ 0x43BB
MEM_FAT_COUNT1 equ 0x43BC
MEM_FAT_CURDIR equ 0x43DF
MEM_FAT_CURRDIR equ 0x443F
MEM_FAT_DATASTART equ 0x43C1
MEM_FAT_DIRSEC equ 0x43CD
MEM_FAT_EXEC_COUNT equ 0x4445
MEM_FAT_EXEC_CURR equ 0x4443
MEM_FAT_EXEC_START equ 0x4447
MEM_FAT_FILEREMAIN equ 0x43C9
MEM_FAT_OF0_ATTRIBUTE equ 0x442F
MEM_FAT_OF0_CCLUST equ 0x4431
MEM_FAT_OF0_DATREM equ 0x443B
MEM_FAT_OF0_DATSEC equ 0x4437
MEM_FAT_OF0_FATSEC equ 0x4433
MEM_FAT_RESERVED equ 0x43B6
MEM_FAT_ROOTSTART equ 0x43C5
MEM_FAT_SECTORS equ 0x43B9
MEM_FAT_TMPFNAME equ 0x43CF
MEM_FAT_TMPPOINTER equ 0x43BD
MEM_IDE_BUFFER equ 0x41B6
MEM_IDE_DEVICE equ 0x40CB
MEM_IDE_DEV_TABLE equ 0x40D5
MEM_IDE_FSBUFFER equ 0x43B6
MEM_IDE_PARTITION equ 0x40CD
MEM_IDE_POINTER equ 0x40D1
MEM_IDE_SELECTED equ 0x4115
MEM_IDE_STATUS equ 0x40CC
MEM_IDE_STRING_0 equ 0x4116
MEM_IDE_STRING_1 equ 0x413E
MEM_IDE_STRING_2 equ 0x4166
MEM_IDE_STRING_3 equ 0x418E
MSG_CLEAR equ 0x177
NOT_IMPLEMENTED equ 0x19C6
OP_CALL equ 0x1A28
OP_CD equ 0x1DF8
OP_CLR equ 0x1BBC
OP_DASM equ 0x1AA9
OP_DIR equ 0x1DF4
OP_DUMP equ 0x1A48
OP_EXEC equ 0x1A0F
OP_FSEXEC equ 0x1E15
OP_IIC_IN equ 0x1B70
OP_IIC_OUT equ 0x1B10
OP_IO_IN equ 0x1AD9
OP_IO_OUT equ 0x1AEF
OP_LSDSK equ 0x1DD1
OP_RTIME equ 0x1BC0
OP_SELDSK equ 0x1DD5
OP_SET equ 0x1A78
OP_STIME equ 0x1D58
POST_CHECK_APU equ 0x1E4E
POST_CHECK_IDE_30 equ 0x1E79
POST_CHECK_IDE_40 equ 0x1E8C
POST_CHECK_PIO equ 0x1E29
POST_START equ 0x1E19
POST_TEST_RTC equ 0x1EA6
MEM_FAT_AMOUNT equ 0x44B8
MEM_FAT_CLUSTERLEN equ 0x44BB
MEM_FAT_COUNT1 equ 0x44BC
MEM_FAT_CURDIR equ 0x44DF
MEM_FAT_CURRDIR equ 0x453F
MEM_FAT_DATASTART equ 0x44C1
MEM_FAT_DIRSEC equ 0x44CD
MEM_FAT_EXEC_COUNT equ 0x4545
MEM_FAT_EXEC_CURR equ 0x4543
MEM_FAT_EXEC_START equ 0x4547
MEM_FAT_FILEREMAIN equ 0x44C9
MEM_FAT_OF0_ATTRIBUTE equ 0x452F
MEM_FAT_OF0_CCLUST equ 0x4531
MEM_FAT_OF0_DATREM equ 0x453B
MEM_FAT_OF0_DATSEC equ 0x4537
MEM_FAT_OF0_FATSEC equ 0x4533
MEM_FAT_RESERVED equ 0x44B6
MEM_FAT_ROOTSTART equ 0x44C5
MEM_FAT_SECTORS equ 0x44B9
MEM_FAT_TMPFNAME equ 0x44CF
MEM_FAT_TMPPOINTER equ 0x44BD
MEM_IDE_BUFFER equ 0x42B6
MEM_IDE_DEVICE equ 0x41CB
MEM_IDE_DEV_TABLE equ 0x41D5
MEM_IDE_FSBUFFER equ 0x44B6
MEM_IDE_PARTITION equ 0x41CD
MEM_IDE_POINTER equ 0x41D1
MEM_IDE_SELECTED equ 0x4215
MEM_IDE_STATUS equ 0x41CC
MEM_IDE_STRING_0 equ 0x4216
MEM_IDE_STRING_1 equ 0x423E
MEM_IDE_STRING_2 equ 0x4266
MEM_IDE_STRING_3 equ 0x428E
MSG_CLEAR equ 0x1B6
NOT_IMPLEMENTED equ 0x19F5
OP_CALL equ 0x1A57
OP_CD equ 0x1E27
OP_CLR equ 0x1BEB
OP_DASM equ 0x1AD8
OP_DIR equ 0x1E23
OP_DUMP equ 0x1A77
OP_EXEC equ 0x1A3E
OP_FSEXEC equ 0x1E44
OP_IIC_IN equ 0x1B9F
OP_IIC_OUT equ 0x1B3F
OP_IO_IN equ 0x1B08
OP_IO_OUT equ 0x1B1E
OP_LSDSK equ 0x1E00
OP_RTIME equ 0x1BEF
OP_SELDSK equ 0x1E04
OP_SET equ 0x1AA7
OP_STIME equ 0x1D87
POST_CHECK_APU equ 0x1E7D
POST_CHECK_IDE_30 equ 0x1EA8
POST_CHECK_IDE_40 equ 0x1EBB
POST_CHECK_PIO equ 0x1E58
POST_START equ 0x1E48
POST_TEST_RTC equ 0x1ED5
PRG_RAM_START equ 0x4110
PRG_RAM_TOP equ 0xFF00
PRINTINLINE equ 0x191
PRINTINLINE equ 0x1D0
PROG_MEM_START equ 0x4000
PROG_ROM_START equ 0x100
RST_00 equ 0x00
@@ -165,391 +184,391 @@ RST_10 equ 0x10
RST_18 equ 0x18
STACK_RAM_TOP equ 0xFFFF
START_ROM equ 0x00
STRCONV_BYTES_TO_HEX equ 0x22D
STRCONV_BYTES_TO_HEX_1 equ 0x23C
STRCONV_BYTES_TO_HEX_2 equ 0x246
STR_Banner_Start equ 0x264F
STR_PD_HEADER equ 0x183C
STRCONV_BYTES_TO_HEX equ 0x26C
STRCONV_BYTES_TO_HEX_1 equ 0x27B
STRCONV_BYTES_TO_HEX_2 equ 0x285
STR_Banner_Start equ 0x2689
STR_PD_HEADER equ 0x186B
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
_COMMAND_PROCESS_FOUND equ 0x19C5
_OP_CALL equ 0x1A47
_OP_IIC_ACK_ERR equ 0x1B55
_OP_IIC_ACK_ERR_str equ 0x1B5C
_OP_IIC_IN_LOOP equ 0x1BA2
_OP_IIC_IN_LOOP_TEXT equ 0x1BAF
_OP_IIC_OUT_LOOP equ 0x1B26
_OP_IIC_OUT_SEND equ 0x1B42
_OP_RTIME_NN equ 0x1BC3
_OP_RTIME_RD_CMD equ 0x1C7B
_OP_SELDSK_INVALID equ 0x1DE4
_OP_SELDSK_INVALID_STR equ 0x1DFC
_OP_SET_LOOP equ 0x1A90
_OP_STIME_INVALID equ 0x1D1E
_OP_STIME_PROMPT equ 0x1D35
_OP_STIME_PROMPT_ERR equ 0x1D4D
_OP_STIME_STR_DAY equ 0x1C7C
_OP_STIME_STR_HOUR equ 0x1CCD
_OP_STIME_STR_MIN equ 0x1CE8
_OP_STIME_STR_MON equ 0x1C97
_OP_STIME_STR_SEC equ 0x1D03
_OP_STIME_STR_YEAR equ 0x1CB2
_POST_CHECK_APU_FAILED equ 0x1E6D
_POST_CHECK_IDE_FAILED equ 0x1E9F
_POST_CHECK_PIO_FAILED equ 0x1E42
_POST_TEST_RTC_INVALID equ 0x1EE0
_POST_TEST_RTC_NOTFOUND equ 0x1ED9
_STR_NOT_FOUND equ 0x19E8
_STR_NOT_IMPLEMENTED equ 0x19D4
_STR_SYNTAX equ 0x19FC
_beep_pause_l1 equ 0xDC2
_compare_filename_loop equ 0x2313
_compare_filename_nomatch equ 0x2321
_fat_cd_navigate equ 0x24C4
_fat_cd_navigate_end equ 0x250A
_fat_cd_navigate_errfile equ 0x2532
_fat_cd_navigate_errfile_str equ 0x2564
_fat_cd_navigate_error equ 0x251C
_fat_cd_navigate_error_str equ 0x253A
_fat_cd_navigate_findsec equ 0x24C9
_fat_cd_navigate_findsec_skipslash equ 0x24F5
_fat_cd_navigate_goback_fl equ 0x2480
_fat_cd_navigate_inerror equ 0x252A
_fat_cd_navigate_inerrorS equ 0x2524
_fat_cd_navigate_inerrore equ 0x252B
_fat_cd_navigate_inputerr_str equ 0x2551
_fat_cd_navigate_l2 equ 0x24FB
_fat_exec_notexec equ 0x262B
_fat_exec_notfound equ 0x2612
_fat_exec_read_done equ 0x25FA
_fat_exec_readloop1 equ 0x25DC
_fat_get_root_table_invalid equ 0x210B
_fat_getfatsec_notroot equ 0x214A
_fat_increment_32 equ 0x2299
_fat_lfs_loop equ 0x2211
_fat_lfs_loop_compare_end equ 0x224B
_fat_lfs_loop_compare_match equ 0x224F
_fat_lfs_loop_compare_next_sector equ 0x2223
_fat_math_add32 equ 0x22AD
_fat_math_mul32 equ 0x22DE
_fat_math_mul32_l equ 0x22E5
_fat_math_mul32_noadd equ 0x22F2
_fat_math_sector_add_16 equ 0x2285
_fat_print_directory_dir equ 0x2401
_fat_print_directory_loop equ 0x2394
_fat_print_directory_loop_break equ 0x245E
_fat_print_directory_loop_file equ 0x23B0
_fat_print_directory_loop_next equ 0x242C
_fat_print_directory_loop_next_sector equ 0x2437
_format_filename_fat16_clean equ 0x232A
_format_filename_fat16_loop equ 0x2331
_format_filename_fat16_loop_copy equ 0x2344
_format_filename_fat16_loop_skip_8 equ 0x233B
_ideif_drv_sel_fail equ 0x15AB
_ideif_drv_sel_fstr0 equ 0x1668
_ideif_drv_sel_pstr equ 0x165F
_ideif_drv_sel_sstr0 equ 0x1676
_ideif_drv_sel_syn equ 0x1683
_ideif_init_drive_found equ 0x146E
_ideif_init_drive_loop equ 0x1456
_ideif_init_drive_nodrv equ 0x1469
_ideif_init_drive_prt_fnd equ 0x14D9
_ideif_init_drive_prt_l1 equ 0x14C7
_ideif_init_drive_prt_ln equ 0x14D1
_ideif_prnt_devtable_hdr equ 0x15EB
_ideif_prnt_devtable_l1 equ 0x1366
_ideif_prnt_devtable_l1_e2 equ 0x142C
_ideif_prnt_devtable_l1_es equ 0x13AB
_ideif_prnt_devtable_l1_ms equ 0x1429
_ideif_prnt_devtable_l1_nxt equ 0x1373
_ideif_prnt_devtable_l1_s00 equ 0x1399
_ideif_prnt_devtable_l1_s01 equ 0x139E
_ideif_prnt_devtable_l1_s02 equ 0x13A3
_ideif_prnt_devtable_l1_sFF equ 0x13A8
_ideif_prnt_devtable_l1_sel equ 0x1371
_ideif_prnt_devtable_master equ 0x164F
_ideif_prnt_devtable_s00 equ 0x1623
_ideif_prnt_devtable_s01 equ 0x162E
_ideif_prnt_devtable_s02 equ 0x1639
_ideif_prnt_devtable_sFF equ 0x1644
_ideif_prnt_devtable_slave equ 0x1657
_read_bcd_invalid equ 0x14E
_shift4 equ 0x1DCC
beep equ 0xDA9
beep_loop equ 0xDAB
beep_pause equ 0xDC1
compare_filename equ 0x230F
dasm_00 equ 0x9AE
dasm_01 equ 0xC9A
dasm_02 equ 0xA34
dasm_03 equ 0xC6C
dasm_08 equ 0xAB1
dasm_09 equ 0xC3F
dasm_0A equ 0xA16
dasm_0B equ 0xC83
dasm_10 equ 0x9F6
dasm_12 equ 0xA3F
dasm_18 equ 0x9B9
dasm_1A equ 0xA20
dasm_20 equ 0x9D3
dasm_22 equ 0xCE0
dasm_27 equ 0xA79
dasm_28 equ 0x9CC
dasm_2A equ 0xCB1
dasm_2F equ 0xA7D
dasm_30 equ 0x9C4
dasm_32 equ 0xA4A
dasm_37 equ 0xA89
dasm_38 equ 0x9BD
dasm_3A equ 0xA2A
dasm_3F equ 0xA85
dasm_76 equ 0xA8D
dasm_80C6 equ 0xB0A
dasm_BE equ 0xAA7
dasm_C3 equ 0x9B2
dasm_C88E equ 0xB30
dasm_C9 equ 0xA02
dasm_CD equ 0x9FC
dasm_D9 equ 0xABE
dasm_DD equ 0x9E4
dasm_DD_01 equ 0xCA1
dasm_DD_09 equ 0xC5A
dasm_DD_22 equ 0xCF6
dasm_DD_23 equ 0xC71
dasm_DD_2A equ 0xCC8
dasm_DD_2B equ 0xC88
dasm_DD_34 equ 0xC0A
dasm_DD_35 equ 0xC27
dasm_DD_86 equ 0xB12
dasm_DD_8E equ 0xB38
dasm_DD_96 equ 0xB5B
dasm_DD_9E equ 0xB7B
dasm_DD_A6 equ 0xB9C
dasm_DD_AE equ 0xBD3
dasm_DD_B6 equ 0xBB8
dasm_DD_BE equ 0xBEF
dasm_DD_E1 equ 0xD48
dasm_DD_E3 equ 0xACE
dasm_DD_E5 equ 0xD32
dasm_DD_F9 equ 0xD18
dasm_E1 equ 0xD42
dasm_E3 equ 0xAC2
dasm_E5 equ 0xD2C
dasm_E9 equ 0x9DB
dasm_ED_42 equ 0xC51
dasm_ED_43 equ 0xCEC
dasm_ED_44 equ 0xA81
dasm_ED_45 equ 0xA0C
dasm_ED_46 equ 0xA98
dasm_ED_4A equ 0xC48
dasm_ED_4B equ 0xCBD
dasm_ED_4D equ 0xA07
dasm_ED_56 equ 0xA9D
dasm_ED_5E equ 0xAA2
dasm_ED_A0 equ 0xAE6
dasm_ED_A1 equ 0xAF8
dasm_ED_A8 equ 0xAEF
dasm_ED_A9 equ 0xB01
dasm_ED_B0 equ 0xAEA
dasm_ED_B1 equ 0xAFC
dasm_ED_B8 equ 0xAF3
dasm_ED_B9 equ 0xB05
dasm_F3 equ 0xA92
dasm_F9 equ 0xD0E
dasm_FB equ 0xA95
dasm_FD equ 0x9ED
dasm_FD_01 equ 0xCA9
dasm_FD_09 equ 0xC63
dasm_FD_22 equ 0xD02
dasm_FD_23 equ 0xC7A
dasm_FD_2A equ 0xCD4
dasm_FD_2B equ 0xC91
dasm_FD_34 equ 0xC16
dasm_FD_35 equ 0xC33
dasm_FD_86 equ 0xB21
dasm_FD_8E equ 0xB47
dasm_FD_96 equ 0xB67
dasm_FD_9E equ 0xB89
dasm_FD_A6 equ 0xBA8
dasm_FD_AE equ 0xBDF
dasm_FD_B6 equ 0xBC3
dasm_FD_BE equ 0xBFA
dasm_FD_E1 equ 0xD50
dasm_FD_E3 equ 0xADA
dasm_FD_E5 equ 0xD3A
dasm_FD_F9 equ 0xD22
dasm_FF equ 0xA11
dasm_UU equ 0xD58
dasm_UW equ 0xD5C
dasm__AND equ 0xB97
dasm__CP equ 0xBEB
dasm__DEC equ 0xC22
dasm__ED_47 equ 0xA69
dasm__ED_4F equ 0xA71
dasm__ED_57 equ 0xA59
dasm__ED_5F equ 0xA61
dasm__INC equ 0xC05
dasm__LD equ 0xA55
dasm__OR equ 0xBB4
dasm__SBC equ 0xB73
dasm__SUB equ 0xB56
dasm__XOR equ 0xBCE
dasm_opcode_table equ 0x556
dasm_print16hex_addr equ 0x383
dasm_print8hex equ 0x39B
dasm_printFlags_table equ 0xD61
dasm_printRegister8_table equ 0xD71
dasm_printRegister8_table_HL equ 0xD91
dasm_printRegisterIX_table equ 0xD79
dasm_printRegisterIY_table equ 0xD81
dasm_printRegisterSP_table equ 0xD89
disassemble equ 0x247
disassemble_continue equ 0x32D
disassemble_err equ 0x31D
disassemble_next equ 0x24B
disassemble_print_opcode_params_end equ 0x31A
disassemble_print_opcode_params_loop equ 0x2C6
disassemble_print_opcode_raw equ 0x288
disassemble_print_opcode_raw_fill equ 0x29C
disassemble_table_first_match equ 0x35F
disassemble_table_found equ 0x379
disassemble_table_notfound equ 0x37D
disassemble_table_seek equ 0x33B
disassemble_table_seek_loop equ 0x33F
dump_pretty equ 0x17E1
dump_pretty_ascii equ 0x180B
dump_pretty_ascii_cont equ 0x1829
dump_pretty_ascii_loop equ 0x1813
dump_pretty_ascii_none equ 0x1824
dump_pretty_col equ 0x17FE
dump_pretty_end equ 0x183B
dump_pretty_nextrow equ 0x182F
dump_pretty_row equ 0x17E9
endPrint equ 0x19F
fat_cd_single equ 0x2460
fat_copy_lba_pointer equ 0x2306
fat_exec equ 0x257B
fat_get_root_table equ 0x203E
fat_getfatsec equ 0x2133
fat_openfile equ 0x21E4
fat_openfile_noprepare equ 0x21EC
fat_print_directory equ 0x234B
fat_readfilesec equ 0x21B9
fat_reset_pointer equ 0x22F7
format_filename_fat16 equ 0x2325
ide_printerror equ 0xE89
ide_readsector_256 equ 0xE15
ide_readsector_256_waitloop equ 0xE17
ide_readsector_512_inv equ 0xE3E
ide_readsector_512_inv_waitloop equ 0xE43
ide_readsector_timeout equ 0xE73
ide_regread_8 equ 0xDF7
ide_regwrite_8 equ 0xDDB
ide_reset equ 0xDCE
ide_writesector_256 equ 0xE88
ideif_drv_sel equ 0x1573
ideif_get_drv_pointer equ 0x151C
ideif_init_all equ 0x1530
ideif_init_devtable equ 0x133A
ideif_init_drive equ 0x144D
ideif_prnt_devtable equ 0x1358
iic_init equ 0x16F5
iic_read_ack equ 0x1734
iic_receive_buffer equ 0x16C6
iic_receive_buffer_done equ 0x16E9
iic_receive_buffer_err equ 0x16EF
iic_receive_buffer_loop equ 0x16D7
iic_receive_byte equ 0x17BA
iic_receive_byte_loop equ 0x17C7
iic_send_ack equ 0x175A
iic_send_buffer equ 0x169C
iic_send_buffer_done equ 0x16BA
iic_send_buffer_err equ 0x16C0
iic_send_buffer_loop equ 0x16AC
iic_send_byte equ 0x1794
iic_send_byte_loop equ 0x17A0
iic_send_ebit equ 0x1713
iic_send_nack equ 0x1777
iic_send_sbit equ 0x16FE
_COMMAND_PROCESS_FOUND equ 0x19F4
_OP_CALL equ 0x1A76
_OP_IIC_ACK_ERR equ 0x1B84
_OP_IIC_ACK_ERR_str equ 0x1B8B
_OP_IIC_IN_LOOP equ 0x1BD1
_OP_IIC_IN_LOOP_TEXT equ 0x1BDE
_OP_IIC_OUT_LOOP equ 0x1B55
_OP_IIC_OUT_SEND equ 0x1B71
_OP_RTIME_NN equ 0x1BF2
_OP_RTIME_RD_CMD equ 0x1CAA
_OP_SELDSK_INVALID equ 0x1E13
_OP_SELDSK_INVALID_STR equ 0x1E2B
_OP_SET_LOOP equ 0x1ABF
_OP_STIME_INVALID equ 0x1D4D
_OP_STIME_PROMPT equ 0x1D64
_OP_STIME_PROMPT_ERR equ 0x1D7C
_OP_STIME_STR_DAY equ 0x1CAB
_OP_STIME_STR_HOUR equ 0x1CFC
_OP_STIME_STR_MIN equ 0x1D17
_OP_STIME_STR_MON equ 0x1CC6
_OP_STIME_STR_SEC equ 0x1D32
_OP_STIME_STR_YEAR equ 0x1CE1
_POST_CHECK_APU_FAILED equ 0x1E9C
_POST_CHECK_IDE_FAILED equ 0x1ECE
_POST_CHECK_PIO_FAILED equ 0x1E71
_POST_TEST_RTC_INVALID equ 0x1F0F
_POST_TEST_RTC_NOTFOUND equ 0x1F08
_STR_NOT_FOUND equ 0x1A17
_STR_NOT_IMPLEMENTED equ 0x1A03
_STR_SYNTAX equ 0x1A2B
_beep_pause_l1 equ 0xE01
_compare_filename_loop equ 0x234A
_compare_filename_nomatch equ 0x2358
_fat_cd_navigate equ 0x24FF
_fat_cd_navigate_end equ 0x2545
_fat_cd_navigate_errfile equ 0x256D
_fat_cd_navigate_errfile_str equ 0x259F
_fat_cd_navigate_error equ 0x2557
_fat_cd_navigate_error_str equ 0x2575
_fat_cd_navigate_findsec equ 0x2504
_fat_cd_navigate_findsec_skipslash equ 0x2530
_fat_cd_navigate_goback_fl equ 0x24BB
_fat_cd_navigate_inerror equ 0x2565
_fat_cd_navigate_inerrorS equ 0x255F
_fat_cd_navigate_inerrore equ 0x2566
_fat_cd_navigate_inputerr_str equ 0x258C
_fat_cd_navigate_l2 equ 0x2536
_fat_exec_notexec equ 0x2665
_fat_exec_notfound equ 0x264C
_fat_exec_read_done equ 0x2634
_fat_exec_readloop1 equ 0x2616
_fat_get_root_table_invalid equ 0x213A
_fat_getfatsec_notroot equ 0x2179
_fat_increment_32 equ 0x22D0
_fat_lfs_loop equ 0x2246
_fat_lfs_loop_compare_end equ 0x2282
_fat_lfs_loop_compare_match equ 0x2286
_fat_lfs_loop_compare_next_sector equ 0x2258
_fat_math_add32 equ 0x22E4
_fat_math_mul32 equ 0x2315
_fat_math_mul32_l equ 0x231C
_fat_math_mul32_noadd equ 0x2329
_fat_math_sector_add_16 equ 0x22BC
_fat_print_directory_dir equ 0x243A
_fat_print_directory_loop equ 0x23CD
_fat_print_directory_loop_break equ 0x2499
_fat_print_directory_loop_file equ 0x23E9
_fat_print_directory_loop_next equ 0x2465
_fat_print_directory_loop_next_sector equ 0x2470
_format_filename_fat16_clean equ 0x2361
_format_filename_fat16_loop equ 0x2368
_format_filename_fat16_loop_copy equ 0x237B
_format_filename_fat16_loop_skip_8 equ 0x2372
_ide_readsector_512_floop equ 0xE5D
_ideif_drv_sel_fail equ 0x15D2
_ideif_drv_sel_fstr0 equ 0x168F
_ideif_drv_sel_pstr equ 0x1686
_ideif_drv_sel_sstr0 equ 0x169D
_ideif_drv_sel_syn equ 0x16AA
_ideif_init_drive_charloop equ 0x1499
_ideif_init_drive_found equ 0x147B
_ideif_init_drive_loop equ 0x1463
_ideif_init_drive_nodrv equ 0x1476
_ideif_init_drive_prt_fnd equ 0x14F7
_ideif_init_drive_prt_l1 equ 0x14E5
_ideif_init_drive_prt_ln equ 0x14EF
_ideif_prnt_devtable_hdr equ 0x1612
_ideif_prnt_devtable_l1 equ 0x1373
_ideif_prnt_devtable_l1_e2 equ 0x1439
_ideif_prnt_devtable_l1_es equ 0x13B8
_ideif_prnt_devtable_l1_ms equ 0x1436
_ideif_prnt_devtable_l1_nxt equ 0x1380
_ideif_prnt_devtable_l1_s00 equ 0x13A6
_ideif_prnt_devtable_l1_s01 equ 0x13AB
_ideif_prnt_devtable_l1_s02 equ 0x13B0
_ideif_prnt_devtable_l1_sFF equ 0x13B5
_ideif_prnt_devtable_l1_sel equ 0x137E
_ideif_prnt_devtable_master equ 0x1676
_ideif_prnt_devtable_s00 equ 0x164A
_ideif_prnt_devtable_s01 equ 0x1655
_ideif_prnt_devtable_s02 equ 0x1660
_ideif_prnt_devtable_sFF equ 0x166B
_ideif_prnt_devtable_slave equ 0x167E
_read_bcd_invalid equ 0x18D
_shift4 equ 0x1DFB
beep equ 0xDE8
beep_loop equ 0xDEA
beep_pause equ 0xE00
compare_filename equ 0x2346
dasm_00 equ 0x9ED
dasm_01 equ 0xCD9
dasm_02 equ 0xA73
dasm_03 equ 0xCAB
dasm_08 equ 0xAF0
dasm_09 equ 0xC7E
dasm_0A equ 0xA55
dasm_0B equ 0xCC2
dasm_10 equ 0xA35
dasm_12 equ 0xA7E
dasm_18 equ 0x9F8
dasm_1A equ 0xA5F
dasm_20 equ 0xA12
dasm_22 equ 0xD1F
dasm_27 equ 0xAB8
dasm_28 equ 0xA0B
dasm_2A equ 0xCF0
dasm_2F equ 0xABC
dasm_30 equ 0xA03
dasm_32 equ 0xA89
dasm_37 equ 0xAC8
dasm_38 equ 0x9FC
dasm_3A equ 0xA69
dasm_3F equ 0xAC4
dasm_76 equ 0xACC
dasm_80C6 equ 0xB49
dasm_BE equ 0xAE6
dasm_C3 equ 0x9F1
dasm_C88E equ 0xB6F
dasm_C9 equ 0xA41
dasm_CD equ 0xA3B
dasm_D9 equ 0xAFD
dasm_DD equ 0xA23
dasm_DD_01 equ 0xCE0
dasm_DD_09 equ 0xC99
dasm_DD_22 equ 0xD35
dasm_DD_23 equ 0xCB0
dasm_DD_2A equ 0xD07
dasm_DD_2B equ 0xCC7
dasm_DD_34 equ 0xC49
dasm_DD_35 equ 0xC66
dasm_DD_86 equ 0xB51
dasm_DD_8E equ 0xB77
dasm_DD_96 equ 0xB9A
dasm_DD_9E equ 0xBBA
dasm_DD_A6 equ 0xBDB
dasm_DD_AE equ 0xC12
dasm_DD_B6 equ 0xBF7
dasm_DD_BE equ 0xC2E
dasm_DD_E1 equ 0xD87
dasm_DD_E3 equ 0xB0D
dasm_DD_E5 equ 0xD71
dasm_DD_F9 equ 0xD57
dasm_E1 equ 0xD81
dasm_E3 equ 0xB01
dasm_E5 equ 0xD6B
dasm_E9 equ 0xA1A
dasm_ED_42 equ 0xC90
dasm_ED_43 equ 0xD2B
dasm_ED_44 equ 0xAC0
dasm_ED_45 equ 0xA4B
dasm_ED_46 equ 0xAD7
dasm_ED_4A equ 0xC87
dasm_ED_4B equ 0xCFC
dasm_ED_4D equ 0xA46
dasm_ED_56 equ 0xADC
dasm_ED_5E equ 0xAE1
dasm_ED_A0 equ 0xB25
dasm_ED_A1 equ 0xB37
dasm_ED_A8 equ 0xB2E
dasm_ED_A9 equ 0xB40
dasm_ED_B0 equ 0xB29
dasm_ED_B1 equ 0xB3B
dasm_ED_B8 equ 0xB32
dasm_ED_B9 equ 0xB44
dasm_F3 equ 0xAD1
dasm_F9 equ 0xD4D
dasm_FB equ 0xAD4
dasm_FD equ 0xA2C
dasm_FD_01 equ 0xCE8
dasm_FD_09 equ 0xCA2
dasm_FD_22 equ 0xD41
dasm_FD_23 equ 0xCB9
dasm_FD_2A equ 0xD13
dasm_FD_2B equ 0xCD0
dasm_FD_34 equ 0xC55
dasm_FD_35 equ 0xC72
dasm_FD_86 equ 0xB60
dasm_FD_8E equ 0xB86
dasm_FD_96 equ 0xBA6
dasm_FD_9E equ 0xBC8
dasm_FD_A6 equ 0xBE7
dasm_FD_AE equ 0xC1E
dasm_FD_B6 equ 0xC02
dasm_FD_BE equ 0xC39
dasm_FD_E1 equ 0xD8F
dasm_FD_E3 equ 0xB19
dasm_FD_E5 equ 0xD79
dasm_FD_F9 equ 0xD61
dasm_FF equ 0xA50
dasm_UU equ 0xD97
dasm_UW equ 0xD9B
dasm__AND equ 0xBD6
dasm__CP equ 0xC2A
dasm__DEC equ 0xC61
dasm__ED_47 equ 0xAA8
dasm__ED_4F equ 0xAB0
dasm__ED_57 equ 0xA98
dasm__ED_5F equ 0xAA0
dasm__INC equ 0xC44
dasm__LD equ 0xA94
dasm__OR equ 0xBF3
dasm__SBC equ 0xBB2
dasm__SUB equ 0xB95
dasm__XOR equ 0xC0D
dasm_opcode_table equ 0x595
dasm_print16hex_addr equ 0x3C2
dasm_print8hex equ 0x3DA
dasm_printFlags_table equ 0xDA0
dasm_printRegister8_table equ 0xDB0
dasm_printRegister8_table_HL equ 0xDD0
dasm_printRegisterIX_table equ 0xDB8
dasm_printRegisterIY_table equ 0xDC0
dasm_printRegisterSP_table equ 0xDC8
disassemble equ 0x286
disassemble_continue equ 0x36C
disassemble_err equ 0x35C
disassemble_next equ 0x28A
disassemble_print_opcode_params_end equ 0x359
disassemble_print_opcode_params_loop equ 0x305
disassemble_print_opcode_raw equ 0x2C7
disassemble_print_opcode_raw_fill equ 0x2DB
disassemble_table_first_match equ 0x39E
disassemble_table_found equ 0x3B8
disassemble_table_notfound equ 0x3BC
disassemble_table_seek equ 0x37A
disassemble_table_seek_loop equ 0x37E
dump_pretty equ 0x1810
dump_pretty_ascii equ 0x183A
dump_pretty_ascii_cont equ 0x1858
dump_pretty_ascii_loop equ 0x1842
dump_pretty_ascii_none equ 0x1853
dump_pretty_col equ 0x182D
dump_pretty_end equ 0x186A
dump_pretty_nextrow equ 0x185E
dump_pretty_row equ 0x1818
endPrint equ 0x1DE
fat_cd_single equ 0x249B
fat_copy_lba_pointer equ 0x233D
fat_exec equ 0x25B6
fat_get_root_table equ 0x206D
fat_getfatsec equ 0x2162
fat_openfile equ 0x2217
fat_openfile_noprepare equ 0x221F
fat_print_directory equ 0x2382
fat_readfilesec equ 0x21EA
fat_reset_pointer equ 0x232E
format_filename_fat16 equ 0x235C
ide_printerror equ 0xE94
ide_readsector_512_fast equ 0xE49
ide_readsector_timeout equ 0xE7E
ide_regread_8 equ 0xE33
ide_regwrite_8 equ 0xE19
ide_reset equ 0xE0D
ide_writesector_256 equ 0xE93
ideif_drv_sel equ 0x159A
ideif_get_drv_pointer equ 0x153A
ideif_init_all equ 0x154E
ideif_init_devtable equ 0x1347
ideif_init_drive equ 0x145A
ideif_prnt_devtable equ 0x1365
iic_init equ 0x171C
iic_read_ack equ 0x1763
iic_receive_buffer equ 0x16ED
iic_receive_buffer_done equ 0x1710
iic_receive_buffer_err equ 0x1716
iic_receive_buffer_loop equ 0x16FE
iic_receive_byte equ 0x17E9
iic_receive_byte_loop equ 0x17F6
iic_send_ack equ 0x1789
iic_send_buffer equ 0x16C3
iic_send_buffer_done equ 0x16E1
iic_send_buffer_err equ 0x16E7
iic_send_buffer_loop equ 0x16D3
iic_send_byte equ 0x17C3
iic_send_byte_loop equ 0x17CF
iic_send_ebit equ 0x1742
iic_send_nack equ 0x17A6
iic_send_sbit equ 0x1729
interrupt_vectors equ 0x4000
mon_var_template equ 0x44
mon_var_template_end equ 0x40F
nxtILC equ 0x194
param_01 equ 0x3A9
param_02 equ 0x3D0
param_03 equ 0x3ED
param_03_done equ 0x425
param_03_neg equ 0x40E
param_04 equ 0x429
param_04_i equ 0x439
param_05 equ 0x43F
param_06 equ 0x44C
param_07 equ 0x466
param_08 equ 0x473
param_09 equ 0x488
param_09_0A equ 0x48E
param_0A equ 0x47F
param_10 equ 0x49D
param_11 equ 0x4AD
param_11_12 equ 0x4BC
param_11_12_all equ 0x4DC
param_11_12_def equ 0x4CF
param_11_12_ix equ 0x4D4
param_11_12_iy equ 0x4D9
param_12 equ 0x4B5
param_13 equ 0x4ED
param_80 equ 0x50C
param_80_seek equ 0x513
param_81 equ 0x503
param_comma equ 0x547
param_printRegister equ 0x522
param_printRegisterA equ 0x540
param_printRegisterHL equ 0x538
print_16_hex equ 0x16A
print_32_hex equ 0x151
print_a_hex equ 0x10E
print_bcd equ 0x120
print_char equ 0xDE
print_clear equ 0xF1
print_newLine equ 0xF8
print_reg equ 0x1A4
print_str equ 0xE6
print_str_end equ 0xF0
print_str_fixed equ 0x187B
print_wait_out equ 0x103
read_bcd equ 0x138
read_char equ 0x126
read_lba_sector equ 0x1543
str_dev_done equ 0x15E3
str_dev_waitready equ 0x15CB
str_error_start equ 0xEBC
str_error_start1 equ 0xED9
str_error_start2 equ 0xEE2
str_error_time equ 0xEEB
str_post_apu equ 0x1F38
str_post_ide_30 equ 0x1EE7
str_post_ide_40 equ 0x1F02
str_post_nd equ 0x1F6E
str_post_ok equ 0x1FA6
str_post_pio equ 0x1F1D
str_post_rtc equ 0x1F53
str_post_rtc_iv equ 0x1F7C
var_apu_present equ 0x400A
var_buffer_len equ 0x4000
mon_var_template_end equ 0x50F
nxtILC equ 0x1D3
param_01 equ 0x3E8
param_02 equ 0x40F
param_03 equ 0x42C
param_03_done equ 0x464
param_03_neg equ 0x44D
param_04 equ 0x468
param_04_i equ 0x478
param_05 equ 0x47E
param_06 equ 0x48B
param_07 equ 0x4A5
param_08 equ 0x4B2
param_09 equ 0x4C7
param_09_0A equ 0x4CD
param_0A equ 0x4BE
param_10 equ 0x4DC
param_11 equ 0x4EC
param_11_12 equ 0x4FB
param_11_12_all equ 0x51B
param_11_12_def equ 0x50E
param_11_12_ix equ 0x513
param_11_12_iy equ 0x518
param_12 equ 0x4F4
param_13 equ 0x52C
param_80 equ 0x54B
param_80_seek equ 0x552
param_81 equ 0x542
param_comma equ 0x586
param_printRegister equ 0x561
param_printRegisterA equ 0x57F
param_printRegisterHL equ 0x577
print_16_hex equ 0x1A9
print_32_hex equ 0x190
print_a_hex equ 0x143
print_bcd equ 0x155
print_char equ 0x115
print_clear equ 0x126
print_newLine equ 0x12D
print_reg equ 0x1E3
print_str equ 0x11D
print_str_fixed equ 0x18AA
print_wait_out equ 0x138
read_bcd equ 0x177
read_char equ 0x15B
read_in_sts equ 0x16D
read_lba_sector equ 0x1561
str_dev_done equ 0x160A
str_dev_waitready equ 0x15F2
str_error_start equ 0xEC9
str_error_start1 equ 0xEE6
str_error_start2 equ 0xEEF
str_error_time equ 0xEF8
str_post_apu equ 0x1F67
str_post_ide_30 equ 0x1F16
str_post_ide_40 equ 0x1F31
str_post_nd equ 0x1F9D
str_post_ok equ 0x1FD5
str_post_pio equ 0x1F4C
str_post_rtc equ 0x1F82
str_post_rtc_iv equ 0x1FAB
var_apu_present equ 0x410A
var_buffer_len equ 0x4100
var_bytes_count equ 0x411A
var_curserchar equ 0x4006
var_curserlastaddr equ 0x4007
var_curseron equ 0x4005
var_curserstate equ 0x4004
var_curserx equ 0x4002
var_cursery equ 0x4003
var_dir equ 0x402B
var_idebuffer equ 0x40CB
var_input equ 0x407B
var_last_char equ 0x4001
var_curserchar equ 0x4106
var_curserlastaddr equ 0x4107
var_curseron equ 0x4105
var_curserstate equ 0x4104
var_curserx equ 0x4102
var_cursery equ 0x4103
var_dir equ 0x412B
var_idebuffer equ 0x41CB
var_input equ 0x417B
var_last_char equ 0x4101
var_opcode equ 0x4114
var_opcode_length equ 0x4116
var_opcode_pcount equ 0x4119
@@ -557,6 +576,6 @@ var_opcode_start equ 0x4110
var_opcode_string equ 0x4117
var_opcode_table equ 0x4112
var_opcode_x equ 0x4115
var_pio_present equ 0x4009
var_ps2mem equ 0x401B
var_scratch equ 0x400B
var_pio_present equ 0x4109
var_ps2mem equ 0x411B
var_scratch equ 0x410B

View File

@@ -157,14 +157,6 @@ fat_openfile_noprepare:
LD DE, MEM_IDE_BUFFER ;where to store data?
call read_lba_sector
;LD HL,MEM_IDE_BUFFER ;Dump IDE Buffer
;LD B,32
;call dump_pretty
;LD HL,MEM_FAT_TMPFNAME ;Dump IDE Buffer
;LD B,1
;call dump_pretty
LD HL, MEM_IDE_BUFFER ;set buffer start
LD C,16 ;set entries counter

View File

@@ -1,107 +1,107 @@
.include "extern_symbols.s" ;include monitor symbols.
CS_VT82C42_DATA .EQU 0xF0
CS_VT82C42_CTRL .EQU 0xF1
org 0x6000
;VT82C42
MEM_FAT_EXEC_CURR .equ var_scratch+10
MEM_FAT_EXEC_COUNT .equ var_scratch+12
MEM_FAT_EXEC_START .equ var_scratch+14
fat_exec:
ld de,[var_input+6] ;prepare input like to mimic rom behaviour
push de
;DE has pointer to arguments
call fat_openfile
ld a, 0xA7 ;Disable Mouse
out (CS_VT82C42_CTRL), A
ld a, 0xAD ;Disable Keyboard
out (CS_VT82C42_CTRL), A
_keyboard_init_flush_buffer:
in a,(CS_VT82C42_DATA) ;Read buffer
in a,(CS_VT82C42_CTRL) ;Read status byte
bit 0,a ;Test if buffer is empty
jr nz, _keyboard_init_flush_buffer
;buffer is now flushed. Now set the Controller Configuration Byte
ld a, 0x60 ;next byte is command byte register write
ld b, 11111100b ;Disable bits 0,1,6 (disable IRQ and Translation)
call keyb_cmd_wr
;Perform Controller Self Test
ld a, 0xAA
call keyb_cmd_rd
cp 0x55
jr nz, _keyboard_init_failed
;Perform Interface Tests
ld a, 0xAB
call keyb_cmd_rd
or a
jp nz, _fat_exec_notfound ;if not found, abort
;call fat_print_dbg
;load header
ld de, MEM_IDE_BUFFER
call fat_readfilesec
jr nz, _keyboard_init_failed
;Enable Devices
ld a,0xAE
out (CS_VT82C42_CTRL), A
call keyb_wait_ibf_empty
;ld hl, MEM_IDE_BUFFER ;print sector
;ld b,0x20
;call dump_pretty
ld a,(MEM_IDE_BUFFER)
cp 0xC3
jp nz, _fat_exec_notexec
call PRINTINLINE
db 10,13,"Loading ",0
ld hl,[var_input+6]
;Test if device is present Devices
ld a,0xEE
out (CS_VT82C42_DATA), A ;Send echo to keboard (0xEE command)
call keyb_wait_ibf_empty
call keyb_wait_obf
in a,(CS_VT82C42_DATA)
cp a, 0xEE
jr z, _keyboard_init_okay ; 0xFC -> Success. Init done!
;Else device error
ld hl, [STR_keyboard_init_failed]
call print_str
call PRINTINLINE
db " to 0x",0
;get start address
ld bc,(MEM_IDE_BUFFER + 10)
ld a,b
ret
_keyboard_init_failed:
LD HL, [STR_keyboard_init_err]
CALL print_str
RET
_keyboard_init_dev_missing:
LD HL, [STR_keyboard_init_missing]
CALL print_str
RET
_keyboard_init_okay:
LD HL, [STR_keyboard_init_okay]
CALL print_str
RET
; a contains command
; b conatins data
keyb_cmd_wr:
out (CS_VT82C42_CTRL),a ;write command byte
ld a, b
out (CS_VT82C42_DATA),a
ret
; a contains command
; a returns data
keyb_cmd_rd:
out (CS_VT82C42_CTRL),a ;write command byte
_keyb_cmd_rd_l1:
in a, (CS_VT82C42_CTRL) ;read status
call print_a_hex
ld a,c
call print_a_hex
call PRINTINLINE
db " ... ",0
;bc has start addr
ld (MEM_FAT_EXEC_CURR),bc
ld (MEM_FAT_EXEC_START),bc
;get amount of sectors to load
ld hl,(MEM_IDE_BUFFER + 14)
ld l,h
srl l
ld h,0 ;divide by 512
inc hl ;increment because first sector is always loaded
; hl contains sector count
ld (MEM_FAT_EXEC_COUNT), hl
pop de ; restore filename
call fat_openfile ;reset file information
;start reading
_fat_exec_readloop1:
ld de,(MEM_FAT_EXEC_CURR)
call fat_readfilesec
ld hl,(MEM_FAT_EXEC_CURR)
ld de,512
add hl,de
ld (MEM_FAT_EXEC_CURR),hl
ld hl,(MEM_FAT_EXEC_COUNT)
dec hl
ld (MEM_FAT_EXEC_COUNT),hl
ld a,h
or l
jr z, _fat_exec_read_done
jr _fat_exec_readloop1
_fat_exec_read_done:
call PRINTINLINE
db "Load complete!",10,13,0
ld hl,(MEM_FAT_EXEC_START)
jp (hl)
_fat_exec_notfound:
call PRINTINLINE
db 10,13,"File not found!",10,13,0
rra
jr nc, _keyb_cmd_rd_l1 ;wait until OBF is set (data avail)
in a, (CS_VT82C42_DATA)
ret
_fat_exec_notexec:
call PRINTINLINE
db 10,13,"File is not an executable!",10,13,0
keyb_wait_ibf_empty:
in a, (CS_VT82C42_CTRL) ;read status
rra
rra
jr c, keyb_wait_ibf_empty ;if IBF, wait
ret
_test_loop:
call fat_readfilesec
push af
ld hl, MEM_IDE_BUFFER ;print sector
ld b,0x20
call dump_pretty
;call PRINTINLINE
;db 10,13,"SECREAD",10,13,0
pop af
or a
jp z, _test_loop
;check if end of file
keyb_wait_obf:
in a, (CS_VT82C42_CTRL) ;read status
rra
jr nc, keyb_wait_obf ;if IBF, wait
ret
;Status message strings
STR_keyboard_init_okay:
.BYTE "PS/2 Keyboard initialized.",0
STR_keyboard_init_err:
.BYTE "PS/2 Controller error! System HALT!",0
STR_keyboard_init_failed:
.BYTE "PS/2 Keyboard error! System HALT!",0
STR_keyboard_init_missing:
.BYTE "PS/2 no keyboard found!",0

View File

@@ -0,0 +1,108 @@
.include "extern_symbols.s" ;include monitor symbols.
org 0x6000
MEM_FAT_EXEC_CURR .equ var_scratch+10
MEM_FAT_EXEC_COUNT .equ var_scratch+12
MEM_FAT_EXEC_START .equ var_scratch+14
fat_exec:
ld de,[var_input+6] ;prepare input like to mimic rom behaviour
push de
;DE has pointer to arguments
call fat_openfile
or a
jp nz, _fat_exec_notfound ;if not found, abort
;call fat_print_dbg
;load header
ld de, MEM_IDE_BUFFER
call fat_readfilesec
;ld hl, MEM_IDE_BUFFER ;print sector
;ld b,0x20
;call dump_pretty
ld a,(MEM_IDE_BUFFER)
cp 0xC3
jp nz, _fat_exec_notexec
call PRINTINLINE
db 10,13,"Loading ",0
ld hl,[var_input+6]
call print_str
call PRINTINLINE
db " to 0x",0
;get start address
ld bc,(MEM_IDE_BUFFER + 10)
ld a,b
call print_a_hex
ld a,c
call print_a_hex
call PRINTINLINE
db " ... ",0
;bc has start addr
ld (MEM_FAT_EXEC_CURR),bc
ld (MEM_FAT_EXEC_START),bc
;get amount of sectors to load
ld hl,(MEM_IDE_BUFFER + 14)
ld l,h
srl l
ld h,0 ;divide by 512
inc hl ;increment because first sector is always loaded
; hl contains sector count
ld (MEM_FAT_EXEC_COUNT), hl
pop de ; restore filename
call fat_openfile ;reset file information
;start reading
_fat_exec_readloop1:
ld de,(MEM_FAT_EXEC_CURR)
call fat_readfilesec
ld hl,(MEM_FAT_EXEC_CURR)
ld de,512
add hl,de
ld (MEM_FAT_EXEC_CURR),hl
ld hl,(MEM_FAT_EXEC_COUNT)
dec hl
ld (MEM_FAT_EXEC_COUNT),hl
ld a,h
or l
jr z, _fat_exec_read_done
jr _fat_exec_readloop1
_fat_exec_read_done:
call PRINTINLINE
db "Load complete!",10,13,0
ld hl,(MEM_FAT_EXEC_START)
jp (hl)
_fat_exec_notfound:
call PRINTINLINE
db 10,13,"File not found!",10,13,0
ret
_fat_exec_notexec:
call PRINTINLINE
db 10,13,"File is not an executable!",10,13,0
ret
_test_loop:
call fat_readfilesec
push af
ld hl, MEM_IDE_BUFFER ;print sector
ld b,0x20
call dump_pretty
;call PRINTINLINE
;db 10,13,"SECREAD",10,13,0
pop af
or a
jp z, _test_loop
;check if end of file
ret

View File

@@ -1,16 +1,17 @@
:10600000118140D5CDD321B7C29A6011B641CDA838
:10601000213AB641FEC3C2B260CD91010A0D4C6F68
:106020006164696E672000218140CDE600CD910159
:1060300020746F20307800ED4BC04178CD0E01798F
:10604000CD0E01CD9101202E2E2E2000ED431540C6
:10605000ED4319402AC4416CCB3D26002322174052
:10606000D1CDD321ED5B1540CDA8212A15401100DB
:1060700002192215402A17402B2217407CB528020E
:1060800018E2CD91014C6F616420636F6D706C6597
:106090007465210A0D002A1940E9CD91010A0D46C7
:1060A000696C65206E6F7420666F756E64210A0DD1
:1060B00000C9CD91010A0D46696C65206973206E97
:1060C0006F7420616E2065786563757461626C65BC
:1060D000210A0D00C9CDA821F521B6410620CDE148
:0760E00017F1B7CAD560C932
:106000003EA7D3F13EADD3F1DBF0DBF1CB4720F877
:106010003E6006FCCD5B603EAACD6160FE55202649
:106020003EABCD6160B7201E3EAED3F1CD6E603E7B
:10603000EED3F0CD6E60CD7560DBF0FEEE2815215D
:10604000BA60CDE600C9219660CDE600C921DC60CA
:10605000CDE600C9217B60CDE600C9D3F178D3F04D
:10606000C9D3F1DBF1CD0E011F30F8DBF0C9DBF154
:106070001F1F38FAC9DBF11F30FBC950532F3220E4
:106080004B6579626F61726420696E697469616CD5
:10609000697A65642E0050532F3220436F6E7472FC
:1060A0006F6C6C6572206572726F72212053797308
:1060B00074656D2048414C54210050532F32204BC1
:1060C0006579626F617264206572726F722120530C
:1060D000797374656D2048414C54210050532F3220
:1060E000206E6F206B6579626F61726420666F75D8
:0460F0006E642100B9
:00000001FF

File diff suppressed because it is too large Load Diff

View File

@@ -1,15 +1,16 @@
!6000 11 81 40 D5 CD D3 21 B7 C2 9A 60 11 B6 41 CD A8
!6010 21 3A B6 41 FE C3 C2 B2 60 CD 91 01 0A 0D 4C 6F
!6020 61 64 69 6E 67 20 00 21 81 40 CD E6 00 CD 91 01
!6030 20 74 6F 20 30 78 00 ED 4B C0 41 78 CD 0E 01 79
!6040 CD 0E 01 CD 91 01 20 2E 2E 2E 20 00 ED 43 15 40
!6050 ED 43 19 40 2A C4 41 6C CB 3D 26 00 23 22 17 40
!6060 D1 CD D3 21 ED 5B 15 40 CD A8 21 2A 15 40 11 00
!6070 02 19 22 15 40 2A 17 40 2B 22 17 40 7C B5 28 02
!6080 18 E2 CD 91 01 4C 6F 61 64 20 63 6F 6D 70 6C 65
!6090 74 65 21 0A 0D 00 2A 19 40 E9 CD 91 01 0A 0D 46
!60A0 69 6C 65 20 6E 6F 74 20 66 6F 75 6E 64 21 0A 0D
!60B0 00 C9 CD 91 01 0A 0D 46 69 6C 65 20 69 73 20 6E
!60C0 6F 74 20 61 6E 20 65 78 65 63 75 74 61 62 6C 65
!60D0 21 0A 0D 00 C9 CD A8 21 F5 21 B6 41 06 20 CD E1
!60E0 17 F1 B7 CA D5 60 C9
!6000 3E A7 D3 F1 3E AD D3 F1 DB F0 DB F1 CB 47 20 F8
!6010 3E 60 06 FC CD 5B 60 3E AA CD 61 60 FE 55 20 26
!6020 3E AB CD 61 60 B7 20 1E 3E AE D3 F1 CD 6E 60 3E
!6030 EE D3 F0 CD 6E 60 CD 75 60 DB F0 FE EE 28 15 21
!6040 BA 60 CD E6 00 C9 21 96 60 CD E6 00 C9 21 DC 60
!6050 CD E6 00 C9 21 7B 60 CD E6 00 C9 D3 F1 78 D3 F0
!6060 C9 D3 F1 DB F1 CD 0E 01 1F 30 F8 DB F0 C9 DB F1
!6070 1F 1F 38 FA C9 DB F1 1F 30 FB C9 50 53 2F 32 20
!6080 4B 65 79 62 6F 61 72 64 20 69 6E 69 74 69 61 6C
!6090 69 7A 65 64 2E 00 50 53 2F 32 20 43 6F 6E 74 72
!60A0 6F 6C 6C 65 72 20 65 72 72 6F 72 21 20 53 79 73
!60B0 74 65 6D 20 48 41 4C 54 21 00 50 53 2F 32 20 4B
!60C0 65 79 62 6F 61 72 64 20 65 72 72 6F 72 21 20 53
!60D0 79 73 74 65 6D 20 48 41 4C 54 21 00 50 53 2F 32
!60E0 20 6E 6F 20 6B 65 79 62 6F 61 72 64 20 66 6F 75
!60F0 6E 64 21 00

View File

@@ -0,0 +1,18 @@
; prints A as BCD
print_bcd_byte_3:
PUSH DE
PUSH BC
PUSH HL
PUSH IX
print_bcd_done:
POP IX
POP HL
POP BC
POP DE
RET

View File

@@ -0,0 +1,602 @@
; VARS
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_CLUSTERLEN: ; Length of Cluster (1byte)
defs 1
MEM_FAT_COUNT1: ; Counter Var for reading FAT (2byte)
defs 1
MEM_FAT_TMPPOINTER: ; Temporary working pointer
defs 4
MEM_FAT_DATASTART: ; Start of data area
defs 4
MEM_FAT_ROOTSTART: ; Start of Root directory
defs 4
MEM_FAT_FILEREMAIN: ; Remaining sectors in file
defs 4
MEM_FAT_DIRSEC: ; Sectors per directory
defs 2
MEM_FAT_TMPFNAME: ; Temporary filename
defs 16
MEM_FAT_CURDIR: ; Current Directory
defs 80
MEM_FAT_OF0_ATTRIBUTE: ;Current file attribute
defw 0
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 bytes in Data
defs 4
MEM_FAT_CURRDIR: ;Current directory
defs 4
dephase
;-------------------------------------
; Get FAT Root-Table position
;-------------------------------------
fat_get_root_table:
call fat_reset_pointer ;reset fat pointer
; Load first sector on active partition
LD HL, MEM_IDE_POINTER ; pointer to LBA address
LD A,1 ;read 1 sector
LD DE, MEM_IDE_BUFFER ;where to store data?
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
; Read and store FS Properties
LD IX,MEM_IDE_BUFFER
LD A,(IX+0x0D)
LD (MEM_FAT_CLUSTERLEN),A
LD A,(IX+0x0E)
LD (MEM_FAT_RESERVED),A
LD A,(IX+0x0F)
LD (MEM_FAT_RESERVED+1),A
LD A,(IX+0x10)
LD (MEM_FAT_AMOUNT),A
LD A,(IX+0x16)
LD (MEM_FAT_SECTORS),A
LD A,(IX+0x17)
LD (MEM_FAT_SECTORS+1),A
;Get Data Start Sector
;calculate fat length
ld bc,(MEM_FAT_SECTORS)
ld a,(MEM_FAT_AMOUNT) ;add fat to cluster number
ld d,0
ld e,a
call _fat_math_mul32
; BCHL contains result -> store to PTR.MEM_FAT_ROOTSTART
ld (MEM_FAT_ROOTSTART+0),hl
ld (MEM_FAT_ROOTSTART+2),bc
;add offset (reserved sectors)
ld hl,(MEM_IDE_BUFFER +0x0E) ; load sectors into hl
ld (MEM_FAT_TMPPOINTER), hl
xor a
ld (MEM_FAT_TMPPOINTER+2),a
ld (MEM_FAT_TMPPOINTER+3),a
ld bc,[MEM_FAT_ROOTSTART]
ld de,[MEM_FAT_TMPPOINTER]
call _fat_math_add32 ;MEM_FAT_ROOTSTART now contains the first sector
;of the Root directory
;add offset (partition location)
call ideif_get_drv_pointer
inc ix
inc ix
push ix
pop de ;copy poiter to hl
ld bc,[MEM_FAT_ROOTSTART]
call _fat_math_add32 ;MEM_FAT_OF0_DATSEC now contains the first sector
;of the cluster
;copy value from MEM_FAT_ROOTSTART to MEM_IDE_POINTER
ld hl,MEM_FAT_ROOTSTART
ld de,MEM_IDE_POINTER
ldi
ldi
ldi
ldi
;copy value from MEM_FAT_ROOTSTART to MEM_IDE_POINTER
ld hl,MEM_FAT_ROOTSTART
ld de,MEM_FAT_DATASTART
ldi
ldi
ldi
ldi
ld hl,MEM_FAT_ROOTSTART
ld de,MEM_FAT_CURRDIR
ldi
ldi
ldi
ldi
;add offset to data area
;multiply cluster by length of cluster
;calculate sectors for root dir
ld hl,(MEM_IDE_BUFFER+0x11) ;load Maximum root directory entries
ld a,h
ld l,a
xor a ;set a 0, clear carry flag
ld h,a ;shift right by 8 bit = /512
;last step: multiply by 16
ex de,hl
ld bc,16
call _fat_math_mul32
; BCHL contains result -> store to PTR.MEM_FAT_TMPPOINTER
ld (MEM_FAT_TMPPOINTER+0),hl
ld (MEM_FAT_TMPPOINTER+2),bc
ld (MEM_FAT_DIRSEC),hl
; add offset to MEM_FAT_DATASTART
ld de,[MEM_FAT_TMPPOINTER]
ld bc,[MEM_FAT_DATASTART]
call _fat_math_add32 ;MEM_FAT_DATASTART now contains the correct sector
;at teh beginnig of the data area
;done all FS vars populated
;navigate to root directory
ld a,'\'
ld(MEM_FAT_CURDIR),a
xor a
ld(MEM_FAT_CURDIR+1),a
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_FAT_CURRDIR
;-------------------------------------
fat_print_directory:
ld hl,MEM_FAT_CURRDIR
ld de,MEM_IDE_POINTER
ldi
ldi
ldi
ldi
LD DE,(MEM_FAT_SECTORS)
LD (MEM_FAT_COUNT1),DE
LD HL,MEM_IDE_POINTER ;read first sector
LD B,1
LD DE, MEM_IDE_BUFFER ;where to store data?
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
JP Z, _fat_print_directory_loop_next
CP 0xE5 ;skip deleted
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,'.'
call print_char
LD B,3
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
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
JR Z,_fat_print_directory_loop_next_sector
POP HL ;restore start
LD DE, 32 ;length of entry
ADD HL,DE ;increment
JP _fat_print_directory_loop
_fat_print_directory_loop_next_sector: ; end fo sector. read next sector from disk
POP HL ;clear stack from old hl
LD H,0
LD L,1
call _fat_math_sector_add_16 ;increment sector
LD DE,(MEM_FAT_COUNT1) ; decrement sector count (max FAT length)
DEC DE
LD (MEM_FAT_COUNT1),DE
LD A,D
OR E
JP Z, _fat_print_directory_loop_break_dirty ; if DE is 0, mmax is reached. End here
LD HL,MEM_IDE_POINTER ;read next sector
LD B,1
LD DE, MEM_IDE_BUFFER ;where to store data?
call read_lba_sector
LD HL, MEM_IDE_BUFFER ;set buffer start
LD C,16 ;set entries counter
JP _fat_print_directory_loop
_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
ret
; fat change directory
; relative path
; DE pointer to path
fat_cd_single:
push de
; check if user wants to go back (input = '..')
ld a,(de)
cp '.'
jr nz, _fat_cd_navigate; if not, skip
inc de ;check next
ld a,(de)
cp '.'
jr nz, _fat_cd_navigate; if not, skip
ld a,(var_dir+79) ;last byte contains depth
or a; Test if 0
jp z, _fat_cd_navigate_error ;cannot go back any more (already at root)
; check if .. exists in directory
ld a,'.' ;prepare filename buffer
ld hl,[MEM_FAT_TMPFNAME]
ld (hl),a
inc hl
ld (hl),a
inc hl
ld a,0x20 ;clear char 3-11
ld b,11
_fat_cd_navigate_goback_fl:
ld (hl),a
inc hl
djnz _fat_cd_navigate_goback_fl ;fill loop end
call fat_openfile_noprepare ;load file table (only 1st sector needed)
or a ;check for error
jp nz, _fat_cd_navigate_error ;entry not found exception
; find end of path
ld hl,[var_dir+3] ;current position
ld bc,76
ld a,0x00 ;termination char
cpir ;find end
jp po,_fat_cd_navigate_inerror ;in case of error, abort
;hl is now at end of string
ld bc,76
ld a,'\' ;seperation char
cpdr ;serach backwards for "/"
jp po,_fat_cd_navigate_inerror ;in case of error, abort
;hl is now at end of string
inc hl
xor a
ld (hl),a ;set termination char
inc hl
ld (hl),a ;set termination char
ld a,(var_dir+79)
dec a
ld (var_dir+79),a ;decrement dir depth counter
pop de
ld hl,[var_dir+2]
ld a,'\'
ld (hl),a ;set first /
ld hl,MEM_FAT_OF0_DATSEC ;setup directory pointer
ld de,MEM_FAT_CURRDIR
ldi
ldi
ldi
ldi
ret
_fat_cd_navigate
pop de ;get pointer to directory namme
push de ;and re-store it for next use
call fat_openfile ;find 'file' in current directory
_fat_cd_navigate_findsec
or a
jp nz, _fat_cd_navigate_error ;entry not found
ld a, (MEM_FAT_OF0_ATTRIBUTE)
cp 0x10
jp nz, _fat_cd_navigate_errfile
ld a,(var_dir+79)
inc a
ld (var_dir+79),a ;increment dir depth counter
ld hl,[var_dir+2] ;load start of path string
ld a,0 ;load termination char
ld bc,76 ;max length of string
cpir ;find end of path string
dec hl
jp po,_fat_cd_navigate_inerror ;in case of error, abort
;HL now has last element, BC has remaining max length
ld a,(var_dir+79) ;last byte contains depth
cp 1 ;if first path, skip /
jr z, _fat_cd_navigate_findsec_skipslash
ld a,'\'
ld (hl),a
inc hl
_fat_cd_navigate_findsec_skipslash
pop de ;get argument from stack
ex de,hl
push de ;store start to stack
;HL now has start of input string, DE has end of current path
ld bc,09 ;maximum length of directory name +1
_fat_cd_navigate_l2: ;copy new subdirectory
ldi ;copy
jp po,_fat_cd_navigate_inerrorS ;in case of error, abort
ld a,(hl) ;check next char
cp '\' ;end at '\'
jr z, _fat_cd_navigate_end ;else next byte
or a ;or and at 0x00
jr z, _fat_cd_navigate_end ;else next byte
jr _fat_cd_navigate_l2
_fat_cd_navigate_end:
xor a
ld (de),a ;set last byte to 0x00 (termination)
ld hl,MEM_FAT_OF0_DATSEC
;setup directory pointer
ld de,MEM_FAT_CURRDIR
ldi
ldi
ldi
ldi
pop de ;stack cleanup
ret
_fat_cd_navigate_error:
ld hl,[_fat_cd_navigate_error_str]
call print_str
pop de
ret
_fat_cd_navigate_inerrorS: ;with path reset
pop de ;restore former path
dec de ;change pointer to remove previous '\' as well
xor a ;clear a to 0x00
ld (de),a ;set last byte to 0x00 (termination)
jr _fat_cd_navigate_inerrore
_fat_cd_navigate_inerror: ;without path reset
pop de
_fat_cd_navigate_inerrore:
ld hl,[_fat_cd_navigate_inputerr_str]
call print_str
ret
_fat_cd_navigate_errfile:
pop de
ld hl,[_fat_cd_navigate_errfile_str]
call print_str
ret
_fat_cd_navigate_error_str:
db 10,13,"No such directory!",10,13,0
_fat_cd_navigate_inputerr_str:
db 10,13,"Invalid input!",10,13,0
_fat_cd_navigate_errfile_str:
db 10,13,"Cannot cd to file!",10,13,0
;=================== UTIL Functions ===========================
; 32 Bit addition to pointer
; HL has value
;deprecated!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
_fat_math_sector_add_16:
ld (MEM_FAT_TMPPOINTER), hl
xor a
ld (MEM_FAT_TMPPOINTER+2),a
ld (MEM_FAT_TMPPOINTER+3),a
ld de,[MEM_FAT_TMPPOINTER]
ld bc,[MEM_IDE_POINTER]
call _fat_math_add32
ret
;deprecated!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
;hl contains pointer
_fat_increment_32
ld a,(HL) ; byte 0
add 1
ld (hl),a
inc hl
ld a,(HL) ; byte 1
adc 0
ld (hl),a
inc hl
ld a,(HL) ; byte 2
adc 0
ld (hl),a
inc hl
ld a,(HL) ; byte 3
adc 0
ld (hl),a
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
; Multiply 16-bit values (with 32-bit result)
; Operands BC, DE
; Result -> BCHL
_fat_math_mul32:
ld a,c
ld c,b
ld hl,0
ld b,16
_fat_math_mul32_l:
add hl,hl
rla
rl c
jr nc,_fat_math_mul32_noadd
add hl,de
adc a,0
jp nc,_fat_math_mul32_noadd
inc c
_fat_math_mul32_noadd:
djnz _fat_math_mul32_l
ld b,c
ld c,a
ret
; reset LBA pointer to first sector in selected partition
fat_reset_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
; HL = from here
; DE = to this destimation
fat_copy_lba_pointer:
PUSH BC
LD B,0
LD C,4
LDIR
POP BC
ret

View File

@@ -0,0 +1,325 @@
;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
ld a,h ;if not 0x0000
or l
jp nz, _fat_getfatsec_notroot
;if 0x0000, goto root directory
ld hl,MEM_FAT_ROOTSTART
ld de,MEM_FAT_OF0_DATSEC
ldi ;quick and dirty hack to go back to root directory
ldi
ldi
ldi
ret
_fat_getfatsec_notroot:
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
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
;read FAT sector
ld hl,MEM_FAT_OF0_FATSEC ;read next sector
ld b,1
LD DE, MEM_IDE_BUFFER ;where to store data?
call read_lba_sector
;calculate data sector
;multiply cluster by length of cluster
xor a ;clear carry
ld a,(MEM_FAT_CLUSTERLEN)
ld b,0
ld c,a
ld de,(MEM_FAT_OF0_CCLUST) ;load cluster number
dec de ; sub 2 becaus fat starts at 3
dec de
call _fat_math_mul32
; BCHL contains result -> store to PTR.MEM_FAT_OF0_DATSEC
ld (MEM_FAT_OF0_DATSEC+0),hl
ld (MEM_FAT_OF0_DATSEC+2),bc
; add start of data region to addr
ld bc,[MEM_FAT_OF0_DATSEC]
ld de,[MEM_FAT_DATASTART]
call _fat_math_add32 ;MEM_FAT_OF0_FATSEC now contains the correct sector
;in the FAT
;MEM_FAT_OF0_DATSEC now has the first sector of the selected cluster
;reset MEM_FAT_OF0_DATREM to default cluster length
ld a,(MEM_FAT_CLUSTERLEN)
ld l,a
ld h,0
ld (MEM_FAT_OF0_DATREM), hl
;get next cluster
;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 (hl to de)
ld de,MEM_FAT_OF0_CCLUST
ldi ;copy byte for next cluster from FAT
ldi
ret
;store data
; reads single sector of file
; must run fat_readfilesec before to initialize
; if a ix 0x00, success
; if a is 0xFF, end reached
fat_readfilesec:
call fat_print_dbg
ld hl,[MEM_FAT_OF0_DATSEC]
ld b,1
LD DE, MEM_IDE_BUFFER ;where to store data?
call read_lba_sector ;read sectore
ld hl,[MEM_FAT_OF0_DATSEC] ;increment pointer to next sector
call _fat_increment_32 ;***
ld hl,(MEM_FAT_OF0_DATREM) ;reduce counter
xor a
ld de,1
sbc hl,de ;decrement counter
ld (MEM_FAT_OF0_DATREM),hl ;store decremented counter
ret nz ;when not zero, exit function
;if zero:
ld a, 0xFF ;preload error code
ld hl,(MEM_FAT_OF0_CCLUST) ;check next chunk
ld de,0xFFFF ;end mark
sbc hl,de ;if Z match
ret z ;If 0xFFFF, end is reched. Return
;if next cluster available:
xor a
call fat_getfatsec ; read next cluster information
ret
;-------------------------------------
; FAT open file
;
; DE pointer to file name
;-------------------------------------
fat_openfile:
PUSH DE
;MEM_FAT_TMPFNAME now has valid text to compare
LD HL,[MEM_FAT_TMPFNAME]
call format_filename_fat16
POP DE
fat_openfile_noprepare:
PUSH DE
;prepare pointer
ld hl,MEM_FAT_CURRDIR
ld de,MEM_IDE_POINTER
ldi
ldi
ldi
ldi
LD A,(MEM_FAT_DIRSEC) ;init counter for FAT sectors
LD (MEM_FAT_COUNT1),A
LD HL,MEM_IDE_POINTER ;read first sector
LD B,1
LD DE, MEM_IDE_BUFFER ;where to store data?
call read_lba_sector
;LD HL,MEM_IDE_BUFFER ;Dump IDE Buffer
;LD B,32
;call dump_pretty
;LD HL,MEM_FAT_TMPFNAME ;Dump IDE Buffer
;LD B,1
;call dump_pretty
LD HL, MEM_IDE_BUFFER ;set buffer start
LD C,16 ;set entries counter
_fat_lfs_loop:
LD DE,[MEM_FAT_TMPFNAME]
CALL compare_filename
JR C, _fat_lfs_loop_compare_match ;on match
; prepare next entry
DEC C ;next sector after 16 entries
JR Z,_fat_lfs_loop_compare_next_sector
LD DE, 32 ;length of entry
ADD HL,DE ;increment
JP _fat_lfs_loop
_fat_lfs_loop_compare_next_sector:
ld hl,[MEM_IDE_POINTER]
call _fat_increment_32 ;increment sector
LD A,(MEM_FAT_COUNT1) ; decrement sector count (max FAT length)
DEC A
LD (MEM_FAT_COUNT1),A
JP Z, _fat_lfs_loop_compare_end ; if DE is 0, mmax is reached. End here
;call print_a_hex
LD HL,MEM_IDE_POINTER ;read next sector
LD B,1
LD DE, MEM_IDE_BUFFER ;where to store data?
call read_lba_sector
LD HL, MEM_IDE_BUFFER ;set buffer start
LD C,16 ;set entries counter
ld a,(HL)
or a
jp z, _fat_lfs_loop_compare_end ;skip empty sectors
JP _fat_lfs_loop
_fat_lfs_loop_compare_end:
POP DE
;LD HL, [str_file_notfound]
;CALL print_str ;print
ld a,0xFF
RET
_fat_lfs_loop_compare_match:
; get entry
POP DE
; HL points to Start of Table item
PUSH HL
POP IX
; get important information
ld a,(ix+0x1B) ;first cluster number
ld (MEM_FAT_OF0_CCLUST+1),a
ld a,(ix+0x1A)
ld (MEM_FAT_OF0_CCLUST+0),a
ld a,(ix+0x0B)
ld (MEM_FAT_OF0_ATTRIBUTE+0),a
xor a ;clear carry ;set MEM_FAT_OF0_DATREM to remaining sectors
ld a,(ix+0x1F) ;cluste length shift by 256
rra
ld (MEM_FAT_FILEREMAIN+2),a
ld a,(ix+0x1E)
rra
ld (MEM_FAT_FILEREMAIN+1),a
ld a,(ix+0x1D)
rra
ld (MEM_FAT_FILEREMAIN+0),a
ld a,0
ld (MEM_FAT_FILEREMAIN+3),a
call fat_getfatsec ;get sector information
;call print_newLine
;LD B,8
;call print_str_fixed
;ld A,'.'
;call print_char
;LD B,3
;call print_str_fixed
;LD HL, [str_file_found]
;CALL print_str ;print
xor a
RET
; compares filenames
; HL points to name1
; DE points to name2
; Carry is set if match
; Destroys DE, AF
compare_filename:
PUSH HL
push BC
LD B, 11 ;Counter
_compare_filename_loop:
LD A,(DE)
LD C,A
LD A,(HL)
INC HL
INC DE
XOR C ;check if identical (should return 0)
JR NZ, _compare_filename_nomatch
djnz _compare_filename_loop ;if not last, continue
POP BC
POP HL
SCF
RET
_compare_filename_nomatch:
POP BC
POP HL
XOR A ; clear carry flag
RET
; formats filename to 8+3 format
; DE points to source filename to string
; HL points to destination
format_filename_fat16:
LD B, 11 ;counter
PUSH HL
LD A, ' '
_format_filename_fat16_clean:
LD (HL),A
INC HL
DJNZ _format_filename_fat16_clean
POP HL ; continue with copy
LD B, 13
_format_filename_fat16_loop:
LD A, (DE) ; load byte
OR A
RET Z ;exit on 0byte
DEC B ;reduce counter
RET Z ;exit after 12 bytes 8+.+3
CP '.' ; check if dot
JR NZ, _format_filename_fat16_loop_copy ; if not continue as usual
INC DE ;else skip char
_format_filename_fat16_loop_skip_8:
LD A,B
CP 5
JR C, _format_filename_fat16_loop
INC HL
DEC B
JR _format_filename_fat16_loop_skip_8
_format_filename_fat16_loop_copy:
LD A, (DE) ; load byte
LD (HL), A ; copy byte
INC HL
INC DE
JP _format_filename_fat16_loop
str_file_notfound:
db "File not found!",13,10,0
str_file_found:
db " File located!",13,10,0

View File

@@ -0,0 +1,34 @@
regdump:
PUSH BC
PUSH DE
PUSH HL
PUSH AF
CALL PRINTINLINE
defb "REGDUMP",10,13,"A: 0x",0
call print_a_hex
CALL PRINTINLINE
defb " F: 0x",0
POP BC
PUSH BC
LD A,C
call print_a_hex
CALL PRINTINLINE
defb 13,10,"BC: 0x",0
ld a,b
call print_a_hex
ld a,c
call print_a_hex
CALL PRINTINLINE
defb 13,10,0
POP AF
POP HL
POP DE
POP BC

View File

@@ -0,0 +1,327 @@
.include "extern_symbols.s" ;include monitor symbols.
org 0xB000
CS_PIO_BD .EQU 0xF5
CS_PIO_BC .EQU 0xF7
CS_PIO_AD .EQU 0xF4
CS_PIO_AC .EQU 0xF6
CS_I2C_S1 .EQU 0xF3
CS_I2C_SX .EQU 0xF2
IIC_RTC equ 11010000b
IIC_INIT:
LD A,0xCF
OUT (CS_PIO_AC), A
LD A,11110101b
OUT (CS_PIO_AC), A
LD A,00000000b ; Reset PCF8584 minimum 30 clock cycles
OUT (CS_PIO_AD), A
LD BC,0x1000
CALL PAUSE_LOOP
LD A,0000010b
OUT (CS_PIO_AD), A
NOP
NOP
NOP
LD A, 0x80 ;S1 -> Select S0, PIN disabled, ESO = 0, Interrupt disabled, STA, STA, ACK = 0
OUT (CS_I2C_S1),A
CALL SlowAccess
CALL SlowAccess
LD A,0x55 ;S0 -> Loads byte 55H into register S0'; effective own address becomes AAH
OUT (CS_I2C_SX),A
CALL SlowAccess
LD A, 0xA0 ;S1 -> Loads byte A0H into register S1, i.e. next byte will be loaded into the clock control register S2.
OUT (CS_I2C_S1),A
CALL SlowAccess
LD A,0x00 ;Load 18H into S2 register (clock control - 8 MHz, 90 KHz)
OUT (CS_I2C_SX),A
CALL SlowAccess
LD A,0xC1 ;S1 -> loads byte C1H into register S1; register enable
;serial interface, set I 2C-bus into idle mode;
;SDA and SCL are HIGH. The next write or read
;operation will be to/from data transfer register
;S0 if A0 = LOW.;
OUT (CS_I2C_S1),A
CALL SlowAccess
;CALL force_stop
JP PROMPT_BEGIN
LD BC,$0100
CALL PAUSE_LOOP
; Send test message to RTC
LD DE, 0xC000 ; Set I2C Buffer Location
LD A,0x00
LD (DE),A
;call regdump
LD B, IIC_RTC ; Set I2C Address
LD A, 1 ; Set I2C Buffer length
call i2c_send
LD DE, 0xC010
LD B, IIC_RTC
LD A, 7
call i2c_read
JP PROMPT_BEGIN
;CLK_ENABLE:
; LD DE, 0xC000 ; Set I2C Buffer Location
; LD A,0x00
; LD (0xC000),A
; LD (0xC001),A
; ;call regdump
;
; LD B, IIC_RTC ; Set I2C Address
; LD A, 2 ; Set I2C Buffer length
; call i2c_send
; JP PROMPT_BEGIN
;------------------------------------------------------------------------------
; i2c_send
;
; Sends data over the i2c bus
; A contains BYTE COUNTER
; B contains ADDRESS
; DE contains location of Data Buffer
;------------------------------------------------------------------------------
i2c_send:
; CALL PRINTINLINE;
; defb "SEND A",10,13,0
PUSH BC
PUSH AF
CALL i2c_bus_rdy
; CALL PRINTINLINE
; defb "SEND START",10,13,0
LD A,B ;Load 'slave address' into S0 register:
OUT (CS_I2C_SX),A
CALL SlowAccess
LD A, 0xC5 ;Load C5H into S1. 'C5H' = PCF8584 generates
;the 'START' condition and clocks out the slave
;address and the clock pulse for slave acknowledgement.
OUT (CS_I2C_S1),A
POP AF
LD C,A
INC C
i2c_send_1: ; LOOP 1 : Wait for bus ready
IN A,(CS_I2C_S1) ; Read byte from S1 register
BIT 7,A ; Is bus free? (S1 ~BB=1?)
JR NZ,i2c_send_1 ; No - loop
BIT 4,A ; slave acknowledged? (LRB = 0?)
JR NZ, i2c_send_stop ; if not, cancel transmission
LD A,(DE) ; Load next byte from buffer
INC DE
DEC C
JR Z, i2c_send_stop ; if counter = 0, exit loop
OUT (CS_I2C_SX),A ; Send byte
JR i2c_send_1 ; if counter > 0, loop again
i2c_send_stop:
LD A, 0xC3 ;STOP
OUT (CS_I2C_S1),A
CALL SlowAccess
POP BC
RET
;------------------------------------------------------------------------------
; i2c_read
;
; Sends data over the i2c bus
; A contains BYTE COUNTER
; B contains ADDRESS
; DE contains location of Data Buffer
;------------------------------------------------------------------------------
i2c_read:
PUSH DE
PUSH BC
PUSH AF
LD A,B ;Load 'slave address' into S0 register:
OR 0x01 ;Set RW Bit for read operation
OUT (CS_I2C_SX),A
CALL SlowAccess
CALL i2c_bus_rdy ; Is bus ready
LD A, 0xC5 ;Load C5H into S1. 'C5H' = PCF8584 generates
;the 'START' condition and clocks out the slave
;address and the clock pulse for slave acknowledgement.
OUT (CS_I2C_S1),A
;Setup counter
POP AF
LD C,A ; Load BYTE COUNTER into C
INC C ; Offset C by 1
i2c_read_1: ;Wait for PIN = 0
IN A,(CS_I2C_S1) ; Read byte from S1 register
BIT 7,A ; S1 PIN=1?
JR NZ,i2c_read_1 ; No - loop
BIT 3,A ; S1 LRB=0? slave ACK?
JR NZ, i2c_read_error ; No ACK -> an error has occured
DEC C
LD A, C
DEC A ;If n = m 1?
JR Z, i2c_read_last
IN A,(CS_I2C_SX)
LD (DE),A
INC DE
JR i2c_read_1
i2c_read_last: ;read last byte
LD A, 0x40
OUT (CS_I2C_S1),A
CALL SlowAccess
IN A,(CS_I2C_SX) ;receives the final data byte. Neg. ACK is also sent.
LD (DE),A
INC DE
i2c_read_last_1:
IN A,(CS_I2C_S1) ; Read byte from S1 register
BIT 7,A ; S1 PIN=1?
JR NZ,i2c_read_last_1 ; No - loop
i2c_read_error:
NOP
i2c_read_stop:
LD A, 0xC3
OUT (CS_I2C_S1),A
CALL SlowAccess
IN A,(CS_I2C_SX) ;transfers the final data byte from the
;data buffer to accumulator.
CALL SlowAccess
LD (DE),A
POP BC
POP DE
RET
i2c_stop_force:
;------------------------------------------------------------------------------
; i2c_rdy
;
; Waits until the PCF8584 signals a byte transmission/reception is complete.
;------------------------------------------------------------------------------
i2c_rdy:
PUSH AF
i2c_rlp:
IN A,(CS_I2C_S1) ; Read byte from S1 register
BIT 7,A ; Is Tx/Rx complete? (S1 PIN=0?)
call print_a_hex
JR NZ,i2c_rlp ; No - loop
i2crlpex:
POP AF
RET
;------------------------------------------------------------------------------
; i2c_bus_rdy
;
; Waits until the I2C bus is free before RETurning
;------------------------------------------------------------------------------
i2c_bus_rdy:
PUSH AF
i2c_blp:
IN A,(CS_I2C_S1) ; Read byte from S1 register
PUSH AF
call print_a_hex
POP AF
BIT 0,A ; Is bus free? (S1 ~BB=1?)
JR Z,i2c_blp ; No - loop
i2cblpex:
POP AF
RET
;------------------------------------------------------------------------------
; PAUSE_LOOP
;
; Timer function
;
; 16-bit (BC) decrement counter, performing 4xNEG loop until BC
; reaches zero.
;
; 61 T-states in loop = 15.25uS per loop @ 4 MHz - near enough
; a second delay for 65,535 iterations.
;
; Set iteration count in BC before calling this function.
; Destroys: BC
;------------------------------------------------------------------------------
PAUSE_LOOP:
PUSH AF ; 11 T-states
pau_lp:
;NEG ; 8 T-states
;NEG ; 8 T-states
;NEG ; 8 T-states
;NEG ; 8 T-states
PUSH BC ; 11 T-states
POP BC ; 10 T-states
PUSH BC ; 11 T-states
POP BC ; 10 T-states
DEC BC ; 6 T-states
LD A,C ; 9 T-states
OR B ; 4 T-states
JP NZ,pau_lp ; 10 T-states
POP AF ; 10 T-states
RET ; Pause complete, RETurn
;------------------------------------------------------------------------------
; 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
SlowAccess:
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RET
;.include "regdump.s"
force_stop:
IN A,(CS_I2C_S1)
BIT 0, A
RET NZ
LD A, 11000011b
OUT (CS_I2C_S1),A
NOP
NOP
JR force_stop

View File

@@ -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"

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1 @@
../../monitor_v2/zout/symbols.s

View File

@@ -0,0 +1,5 @@
export OPT_GEN_SYMBOLTABLE=0
export OPT_GEN_MONFILE=1
export OPT_GEN_OBJFILE=1
export OPT_WRITEROM=0
export FILENAME=test

View File

@@ -0,0 +1,135 @@
.include "extern_symbols.s" ;include monitor symbols.
START_ADDR .EQU 0x8000
org START_ADDR
com_header:
jp com_prg
db 0x00
dw 0x00, 0x00, 0x00 ;always 0
dw [START_ADDR] ;start addr
dw [_eof] ;end of file
dw [_eof - START_ADDR] ;length
dc 48,0x00
com_prg:
ld hl,[var_input] ;find end of command name
ld bc,80
ld a,' '
cpir
ld bc,80
ld a,' '
cpir
push hl
pop hl
;HL now has pointer to file name
ex de,hl
call fat_openfile ;find file
or a
jp nz, _com_prg_fail ;if not found, exit
;prepare 32bit counter
xor a
ld (var_scratch), a
ld (var_scratch+1), a
ld (var_scratch+2), a
ld (var_scratch+3), a
;printloop
_com_prg_loop: ;main loop, load sector
ld de,[MEM_IDE_BUFFER]
call fat_readfilesec ;read sector
push af
ld hl, [_com_prg_fail_str_header]
call print_str ;print header
ld hl, [MEM_IDE_BUFFER]
ld de, 512 ; set sector byte counter
ld (var_scratch+4),de
_com_prg_loop_row:
call print_newLine
ld a, (var_scratch+3) ;print offset
call print_a_hex
ld a, (var_scratch+2)
call print_a_hex
ld a, (var_scratch+1)
call print_a_hex
ld a, (var_scratch)
call print_a_hex
ld a, ' '
call print_char
ld a, '|'
call print_char
ld a, ' '
call print_char
ld a,(var_scratch) ;increment total byte counter
add 16
ld (var_scratch),a
ld a,(var_scratch+1) ; byte 1
adc 0
ld (var_scratch+1),a
ld a,(var_scratch+2) ; byte 2
adc 0
ld (var_scratch+2),a
ld a,(var_scratch+3) ; byte 3
adc 0
ld (var_scratch+3),a
;now start printing data (512 bytes)
ld b, 16 ; bytes per column
push hl
_com_prg_loop_column:
ld a, (hl) ;print value
call print_a_hex
ld a, ' ' ;print seperator
call print_char
inc hl ;increment current byte pointer
ld de,(var_scratch+4) ;decrement sector byte counter
dec de
ld (var_scratch+4),de
djnz _com_prg_loop_column ;loop 16 times
ld a, '|'
call print_char
ld a, ' '
call print_char
pop hl
ld b, 16 ; bytes per column
_com_prg_loop_column_ascii:
ld a, (hl)
inc hl
cp 32
jp c, _com_prg_loop_column_ascii_none ;if less than 32, it is not a char
cp 127
jp nc, _com_prg_loop_column_ascii_none ;if greater or equal than 128, it is not a char
call print_char
jr _com_prg_loop_column_ascii_le
_com_prg_loop_column_ascii_none:
ld a,'.'
call print_char
_com_prg_loop_column_ascii_le:
djnz _com_prg_loop_column_ascii
ld a, ' '
call print_char
ld a, '|'
call print_char
;next row:
ld a,d ;if sector byte counter is not 0
or e
jp nz, _com_prg_loop_row ;next row
;else read next sector or exit
pop af ;if status from sector read
or a
jp z, _com_prg_loop ;sector available
;else exit
call print_newLine
ret
_com_prg_fail:
ld hl,[_fat_exec_notfound]
call print_str
ret
_com_prg_fail_str_header:
db 10,13,'OFFSET | 0 1 2 3 4 5 6 7 8 9 A B C D E F | ASCII',0
prg_end:
_eof:

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,24 @@
:10800000C340800000000000000000806D816D0111
:108010000000000000000000000000000000000060
:108020000000000000000000000000000000000050
:108030000000000000000000000000000000000040
:10804000217B410150003E20EDB10150003E20ED6A
:10805000B1E5E1EBCDDD21B7C22181AF320B413279
:108060000C41320D41320E4111B642CDB021F52105
:108070002881CDEA0021B642110002ED530F41CD17
:10808000FC003A0E41CD12013A0D41CD12013A0CDD
:1080900041CD12013A0B41CD12013E20CDE2003E0E
:1080A0007CCDE2003E20CDE2003A0B41C610320BFF
:1080B000413A0C41CE00320C413A0D41CE00320D16
:1080C000413A0E41CE00320E410610E57ECD12013E
:1080D0003E20CDE20023ED5B0F411BED530F41101D
:1080E000EBCDE2003E7CCDE2003E20CDE200E10699
:1080F000107E23FE20DA0281FE7FD20281CDE200D3
:1081000018053E2ECDE20010E83E20CDE2003E7C78
:10811000CDE2007AB3C27F80F1B7CA6880CDFC009F
:10812000C9211226CDEA00C90A0D4F4646534554CF
:108130002020207C2030202031202032202033209D
:1081400020342020352020362020372020382020C1
:108150003920204120204220204320204420204557
:0D81600020204620207C2041534349490047
:00000001FF

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,23 @@
!8000 C3 40 80 00 00 00 00 00 00 00 00 80 6D 81 6D 01
!8010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
!8020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
!8030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
!8040 21 7B 41 01 50 00 3E 20 ED B1 01 50 00 3E 20 ED
!8050 B1 E5 E1 EB CD DD 21 B7 C2 21 81 AF 32 0B 41 32
!8060 0C 41 32 0D 41 32 0E 41 11 B6 42 CD B0 21 F5 21
!8070 28 81 CD EA 00 21 B6 42 11 00 02 ED 53 0F 41 CD
!8080 FC 00 3A 0E 41 CD 12 01 3A 0D 41 CD 12 01 3A 0C
!8090 41 CD 12 01 3A 0B 41 CD 12 01 3E 20 CD E2 00 3E
!80A0 7C CD E2 00 3E 20 CD E2 00 3A 0B 41 C6 10 32 0B
!80B0 41 3A 0C 41 CE 00 32 0C 41 3A 0D 41 CE 00 32 0D
!80C0 41 3A 0E 41 CE 00 32 0E 41 06 10 E5 7E CD 12 01
!80D0 3E 20 CD E2 00 23 ED 5B 0F 41 1B ED 53 0F 41 10
!80E0 EB CD E2 00 3E 7C CD E2 00 3E 20 CD E2 00 E1 06
!80F0 10 7E 23 FE 20 DA 02 81 FE 7F D2 02 81 CD E2 00
!8100 18 05 3E 2E CD E2 00 10 E8 3E 20 CD E2 00 3E 7C
!8110 CD E2 00 7A B3 C2 7F 80 F1 B7 CA 68 80 CD FC 00
!8120 C9 21 12 26 CD EA 00 C9 0A 0D 4F 46 46 53 45 54
!8130 20 20 20 7C 20 30 20 20 31 20 20 32 20 20 33 20
!8140 20 34 20 20 35 20 20 36 20 20 37 20 20 38 20 20
!8150 39 20 20 41 20 20 42 20 20 43 20 20 44 20 20 45
!8160 20 20 46 20 20 7C 20 41 53 43 49 49 00