OpenCores
URL https://opencores.org/ocsvn/Aquarius/Aquarius/trunk

Subversion Repositories Aquarius

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /Aquarius/trunk/application/shc_clock
    from Rev 2 to Rev 12
    Reverse comparison

Rev 2 → Rev 12

/main.srec
0,0 → 1,242
S00C00006D61696E2E7372656373
S315000020000000240000004000000024000000400002
S31500002010000021200000212E000021200000212E9A
S315000020200000212E0000212E0000212E0000213864
S315000020300000212E0000212E0000212E0000212E5E
S315000020400000212E0000212E0000212E0000212E4E
S315000020500000212E0000212E0000212E0000212E3E
S315000020600000212E0000212E0000212E0000212E2E
S315000020700000212E0000212E0000212E0000212E1E
S31500002080000021EC000021EC000021EC000021EC16
S31500002090000021EC000021EC000021EC000021EC06
S315000020A0000021EC000021EC000021EC000021ECF6
S315000020B0000021EC000021EC000021EC000021ECE6
S315000020C0000021EC000021EC000021EC000021ECD6
S315000020D0000021EC000021EC000021EC000021ECC6
S315000020E0000021EC000021EC000021EC000021ECB6
S315000020F0000021EC000021EC000021EC000021ECA6
S3150000210000002192000021920000219200002192FD
S3150000211000002192000021920000219200002192ED
S31500002120D0C1400B0009D1BF6012402B5F11D0BF58
S31500002130400B0009AFF700094F134F234F024F1210
S315000021404F222FE62FD62FC62FB62FA62F962F86D5
S315000021502F762F662F562F462F362F262F162F0611
S31500002160D0B3400B000960F661F662F663F664F6DA
S3150000217065F666F667F668F669F66AF66BF66CF665
S315000021806DF66EF64F264F164F064F274F17002B4C
S3150000219000094F134F234F024F124F222FE62FD61F
S315000021A02FC62FB62FA62F962F862F762F662F5641
S315000021B02F462F362F262F162F06D09E400B0009AE
S315000021C060F661F662F663F664F665F666F667F63D
S315000021D068F669F66AF66BF66CF66DF66EF64F26DD
S315000021E04F164F064F274F17002B00094F134F234B
S315000021F04F024F124F222FE62FD62FC62FB62FA6ED
S315000022002F962F862F762F662F562F462F362F2660
S315000022102F162F06D088400B000960F661F662F68D
S3150000222063F664F665F666F667F668F669F66AF6C4
S315000022306BF66CF66DF66EF64F264F164F064F2769
S315000022404F17002B000900000000000000000000EE
S315000022500000000000000000000000000000000078
S315000022600000000000000000000000000000000068
S315000022700000000000000000000000000000000058
S315000022800000000000000000000000000000000048
S315000022900000000000000000000000000000000038
S315000022A00000000000000000000000000000000028
S315000022B00000000000000000000000000000000018
S315000022C00000000000000000000000000000000008
S315000022D000000000000000000000000000000000F8
S315000022E000000000000000000000000000000000E8
S315000022F000000000000000000000000000000000D8
S3150000230000000000000000000000000000000000C7
S3150000231000000000000000000000000000000000B7
S3150000232000000000000000000000000000000000A7
S315000023300000000000000000000000000000000097
S315000023400000000000000000000000000000000087
S315000023500000000000000000000000000000000077
S315000023600000000000000000000000000000000067
S315000023700000000000000000000000000000000057
S315000023800000000000000000000000000000000047
S315000023900000000000000000000000000000000037
S315000023A00000000000000000000000000000000027
S315000023B00000000000000000000000000000000017
S315000023C00000000000000000000000000000000007
S315000023D000000000000000000000000000000000F7
S315000023E000000000000000000000000000000000E7
S315000023F000000000000000000000000000000000D7
S31500002400D808482EE800480ED805480BEE00AFFE67
S31500002410000900090009000900090009000900096E
S31500002420000024AC0000200000002498000024A234
S3150000243000002484000024400000248E00090009C6
S315000024402FE6D70CD60C6272636232328F096EF3B6
S31500002450D10A321C33282632E1002712D208E101C4
S31500002460221261729204312C27126FE3000B6EF672
S315000024701000000900002F0000002F0CFECED30034
S3150000248000002F082FE66EF36FE3000B6EF62FE6C3
S315000024906EF36FE3000B6EF62FE66EF36FE3000B41
S315000024A06EF62FE66EF36FE3000B6EF62F86D159AC
S315000024B02F962FA62FB62FC62FD62FE64F22410BCB
S315000024C06EF3D155410B0009D154D555410BE400AB
S315000024D0D154E2002120D1542120D1542120D354BB
S315000024E0E2002322D153D3542312D1542122D154B2
S315000024F0410B0009D153410BE401DC5061C22118A4
S315000025008D45E5002C52D7496170E60971016013CB
S31500002510C90F30668F022710710627106170E45FBD
S31500002520611C31468B002750617021188B03D23E07
S31500002530612071012210D33C6230E10F21293166FE
S315000025408F026123710623106130611C31468B00B6
S31500002550235061702118613002292118012922199E
S3150000256022288903D22F612071012210D32D6230D7
S31500002570E10F212931668F03612371062310623032
S31500002580E12332168B002350D12D410B0009D12EA9
S31500002590410B000988178BB0D12C410BE404DD29CF
S315000025A04D0BE400DB1DD52A4B0BE400D81DDA29C0
S315000025B04A0B64836280E123321689F7D920490BDE
S315000025C00009D5254B0BE400D8174A0B64836280BB
S315000025D0E15F321689F8490B0009D5204B0BE40060
S315000025E0D8124A0B64836280E15F321689F8490B80
S315000025F00009D50B4B0BE400D106410B0009D30CA7
S31500002600D10CE2002322D30C2312E4014D0B2C2221
S31500002610AF7300090000281800002C7400002B1C62
S3150000262000002EA000002F0500002F0400002F063A
S3150000263000002F0001312D0000002F0C00002F0894
S3150000264000002660000026C000002844000029D4AF
S3150000265000002EC0000026E800002ED400002EE860
S315000026602F86D510D1102F962FE64F22E410410B5E
S315000026706EF3D10ED80E6410480B644CD90D490B7D
S31500002680E43AD10D6410480B644C490BE43AD10B83
S315000026906410480B644C6FE34F266EF669F6000B28
S315000026A068F6000900002EB400002B1C00002F0560
S315000026B000002A0400002B5000002F0400002F0603
S315000026C02FE624488D046EF3D204D105A00200093A
S315000026D0D202D10422126FE3000B6EF6ABCD0200DC
S315000026E002140FFF00040FFF2F86D02A2F962FA665
S315000026F02FB62FC62FD62FE66C434F22E40E400B83
S315000027006EF364C0D124410B644CD124410BE40127
S31500002710ED002DD88B02D01F400BE40ED120410BCB
S315000027200009D120410B00096B03E1093B168D20FE
S3150000273060B3D11D410B64B3D11C410B640369DB4B
S3150000274079014908DA1AE40F4A0B6593680761C0F4
S3150000275064B365934A0B2819280B2C8062D3720147
S31500002760612341040129312C4121311C6D233D187F
S3150000277060B388178FCE2DD8D108410BE40060B323
S315000027806FE34F266EF66DF66CF66BF66AF669F633
S31500002790000B68F600002B7C00002A0400002AB417
S315000027A000002818000027EA000027B400002B507C
S315000027B000002CF02FE66043C90FE10930168F02A6
S315000027C06EF3A0017037CB306FE3000B6EF62FE689
S315000027D0604CE13930168F036EF3E1C9A001301C5D
S315000027E070D0C90F6FE3000B6EF62FE64F22A003E1
S315000027F06EF3D107410BE404D106410B00099105A4
S31500002800301089F66FE34F26000B6EF600FF0009C5
S31500002810000029D4000028442FE64F22A0036EF3BF
S31500002820D106410BE404D106410B00099105301095
S315000028308BF66FE34F26000B6EF600FF000029D4DF
S31500002840000028442F862F96D8602FA62FB62FC6B5
S315000028502FD62FE6E1EF4F22E401D95D6EF3281063
S31500002860490B00096080ED1FE1F7E4012D092810EE
S31500002870490B00096080EC1FE1FBE4012C092810DC
S31500002880490B00096080EB1FE1FDE4012B092810CC
S31500002890490B00096080EA1FE1FEE4012A092810BD
S315000028A0490B00096080E21FE10768D378E9381612
S315000028B08D102209C701018C012300090818181878
S315000028C00C181014A077E013A075E012A073E011A5
S315000028D0A071E010E10F68C378F138168917C702B6
S315000028E0018C012300090009122626262626262603
S315000028F0162626261A261E22A05DE014A05BE00FEF
S31500002900A059E00EA057E00DA055E00CE10F68B30A
S3150000291078F138168D17E10FC701018C01230009E4
S3150000292010242424242424241424242418241C209D
S31500002930A041E015A03FE00BA03DE00AA03BE00966
S31500002940A039E008E10F68A378F138168D17E10F7A
S31500002950C701018C012300091024242424242424E3
S315000029601424242418241C20A025E016A023E00704
S31500002970A021E006A01FE005A01DE004E10F6823EA
S3150000298078F138168916C702018C0123000900095F
S315000029901226262626262626162626261A261E220D
S315000029A0A009E017A007E003A005E002A003E001EC
S315000029B0A001E00090096FE34F266EF66DF66CF607
S315000029C06BF66AF669F6000B68F600FFABCD000100
S315000029D0000029D42FE6644CE20032438D0B6EF3DF
S315000029E0930C32378904D1067201611032378BFAA3
S315000029F0720132438BF46FE3000B6EF62710000969
S31500002A00ABCD00002F862F962FA6E8042FE6E9010E
S31500002A104F226A4C6EF3D10DE401410B6583D70C4E
S31500002A2064A3470B6503D10BC90F410B6403D10A9D
S31500002A30410B640379FF49118DED78FC6FE34F2656
S31500002A406EF66AF669F6000B68F6000900002CF0CF
S31500002A5000002D78000027B400002B502F862F96FB
S31500002A602FA6E81C2FE6E9074F226A436EF3D10D25
S31500002A70E401410B6583D10C64A3410B6503D10BC3
S31500002A80C90F410B6403D10A410B640379FF491155
S31500002A908DED78FC6FE34F266EF66AF669F6000B4D
S31500002AA068F6000900002CF000002E16000027B47E
S31500002AB000002B502F86D10B2FE668434F22688CDF
S31500002AC0410B6EF328888D05E400D107410BE50D17
S31500002AD0A0030009D104410BE50C6FE34F266EF607
S31500002AE0000B68F600002BB800002C282F86D109B1
S31500002AF02FE64F22644C410B6EF3E800D106410BE2
S31500002B00E4207801E10F38178BF86FE34F266EF655
S31500002B10000B68F600002B7C00002B502F86D10A94
S31500002B202FE6644C4F226853A0026EF3D10778015A
S31500002B30410B0009648024488FF8644C6FE34F26EC
S31500002B406EF6000B68F6000900002B7C00002B5087
S31500002B502F86D1082FE668434F22688C410B6EF30F
S31500002B60D105E401410B65836FE34F266EF6000B3A
S31500002B7068F6000900002BB800002C282F86E11FFC
S31500002B802FE668432819E10F4F2238168F016EF39E
S31500002B907830910C281BD106410B0009D105E400C1
S31500002BA0410B65836FE34F266EF6000B68F60080D7
S31500002BB000002BB800002C282FE64F226EF3D1051B
S31500002BC0410BE400C98020088BF96FE34F26000B08
S31500002BD06EF6000900002BD82FE66743D111E301FA
S31500002BE027396073CB02621372022200631060738E
S31500002BF06110CB0622006EF3E20BD30A613042105D
S31500002C008FFC613371036110E202272BE20B601C1B
S31500002C10613371022170D103611042108BFB6FE3A7
S31500002C20000B6EF6ABCD00002FE66743655CD10F57
S31500002C30E3012150273971FD62137202227063107D
S31500002C4060736110CB0422006EF3E20BD30861308F
S31500002C5042108FFC613371022170E20BD1046110C6
S31500002C6042108BFB6FE3000B6EF60009ABCD000341
S31500002C70ABCD00002F862F962FE6D919E4004F2200
S31500002C80E530490B6EF3D217D117611042108FFB56
S31500002C90E400490BE5309221D113611042108FFBFD
S31500002CA0E400490BE530D811480B0009E400490B54
S31500002CB0E538480B0009E400490BE50C480B000910
S31500002CC0E400490BE501480B0009E400490BE50661
S31500002CD06FE34F266EF669F6000B68F607D000091B
S31500002CE000002C2800014050ABCD000000002BB89E
S31500002CF0E01F2509C701055C05236043782E242CB7
S31500002D00222A202838423640343E323C4E584C5611
S31500002D104A5448526470626E606C5E6A40084008AD
S31500002D20000B4008400840084008000B40004008DF
S31500002D3040084008000B401840084008400840186A
S31500002D40000B4000400840084008000B402840089F
S31500002D50400840084028000B400040084008400852
S31500002D604028000B401840084008400840284018FA
S31500002D70000B4000000B000961436053200889489E
S31500002D80E2002127333A312A230741243304412420
S31500002D9033044124330441243304412433044124BD
S31500002DA033044124330441243304412433044124AD
S31500002DB0330441243304412433044124330441249D
S31500002DC0330441243304412433044124330441248D
S31500002DD0330441243304412433044124330441247D
S31500002DE0330441243304412433044124330441246D
S31500002DF0330441243304412433044124330441245D
S31500002E00330441243304412433044124312E000B7E
S31500002E106013000BE000E000001944243054442401
S31500002E2030544424305444243054442430544424EC
S31500002E3030544424305444243054442430544424DC
S31500002E4030544424305444243054442430544424CC
S31500002E5030544424305444243054442430544424BC
S31500002E6030544424305444243054442430544424AC
S31500002E70305444243054442430544424305444249C
S31500002E80305444243054442430544424305444248C
S31500002E90305444243054442430544424000B6043BA
S31500002EA0496E746572727570742120436C6F636B22
S31500002EB00000000054696D652D2D2D2D00000000C9
S31500002EC0496E70757420486F7572203D3F20202032
S31500002ED000000000496E707574204D696E20203D1B
S31500002EE03F20202000000000496E70757420536555
S31100002EF06320203D3F2020200000000051
S70500002000DA
/main.map
0,0 → 1,121
Archive member included because of file (symbol)
 
/usr/local/lib/gcc-lib/sh-elf/2.95.3/m2/libgcc.a(_ashiftlt.o)
main.o (__ashlsi3)
/usr/local/lib/gcc-lib/sh-elf/2.95.3/m2/libgcc.a(_sdivsi3.o)
main.o (__sdivsi3)
/usr/local/lib/gcc-lib/sh-elf/2.95.3/m2/libgcc.a(_udivsi3.o)
main.o (__udivsi3)
 
Allocating common symbols
Common symbol size file
 
clock 0x4 main.o
min 0x1 main.o
hour 0x1 main.o
sec 0x1 main.o
countup 0x4 main.o
onesec 0x4 main.o
 
Memory Configuration
 
Name Origin Length Attributes
ram 0x0000000000002000 0x0000000000001e00
stack 0x0000000000003e00 0x0000000000000200
*default* 0x0000000000000000 0xffffffffffffffff
 
Linker script and memory map
 
LOAD crt0.o
LOAD main.o
LOAD /usr/local/lib/gcc-lib/sh-elf/2.95.3/m2/libgcc.a
LOAD /usr/local/sh-elf/lib/libc.a
LOAD /usr/local/lib/gcc-lib/sh-elf/2.95.3/m2/libgcc.a
 
.text 0x0000000000002000 0xea0
*(.text)
.text 0x0000000000002000 0x440 crt0.o
.text 0x0000000000002440 0x8b0 main.o
0x0000000000002c74 lcd_init
0x0000000000002b7c lcd_pos
0x00000000000027ce asc2hex
0x00000000000027b4 hex2asc
0x00000000000029d4 waitNms
0x0000000000002484 nmi_handler
0x0000000000002ab4 lcd_cursor
0x00000000000027ea key_wait_on
0x00000000000024ac main_sh
0x0000000000002a04 lcd_disp_char
0x00000000000026c0 int_timer
0x00000000000026e8 command
0x0000000000002bb8 lcd_ready
0x0000000000002440 irq_handler
0x0000000000002c28 lcd_wr
0x0000000000002aec lcd_erase
0x0000000000002bd8 lcd_rd
0x000000000000248e trap_handler
0x0000000000002660 disp_time
0x00000000000024a2 error
0x0000000000002844 key_scan
0x0000000000002498 illegal
0x0000000000002a5c lcd_disp_long
0x0000000000002818 key_wait_off
0x0000000000002b50 lcd_disp
0x0000000000002b1c lcd_message
.text 0x0000000000002cf0 0x88 /usr/local/lib/gcc-lib/sh-elf/2.95.3/m2/libgcc.a(_ashiftlt.o)
0x0000000000002cf0 __ashlsi3
.text 0x0000000000002d78 0x9e /usr/local/lib/gcc-lib/sh-elf/2.95.3/m2/libgcc.a(_sdivsi3.o)
0x0000000000002d78 __sdivsi3
.text 0x0000000000002e16 0x8a /usr/local/lib/gcc-lib/sh-elf/2.95.3/m2/libgcc.a(_udivsi3.o)
0x0000000000002e16 __udivsi3
*(.strings)
0x0000000000002ea0 _etext = .
 
.tors 0x0000000000002ea0 0x0
0x0000000000002ea0 ___ctors = .
*(.ctors)
0x0000000000002ea0 ___ctors_end = .
0x0000000000002ea0 ___dtors = .
*(.dtors)
0x0000000000002ea0 ___dtors_end = .
 
.rodata 0x0000000000002ea0 0x0
*(.rodata)
 
.rela.dyn
0x0000000000002ea0 __idata_start = (((ADDR (.text) + SIZEOF (.text)) + SIZEOF (.tors)) + SIZEOF (.rodata))
 
.data 0x0000000000002ea0 0x5c load address 0x0000000000002ea0
0x0000000000002ea0 __idata_start = .
0x0000000000002ea0 _sdata = .
*(.data)
.data 0x0000000000002ea0 0x5c main.o
0x0000000000002eb4 mes_time
0x0000000000002ed4 mes_min
0x0000000000002ec0 mes_hour
0x0000000000002ee8 mes_sec
0x0000000000002ea0 mes_welcome
0x0000000000002efc _edata = .
0x0000000000002efc __idata_end = (__idata_start + SIZEOF (.data))
 
.bss 0x0000000000002f00 0x10
0x0000000000002f00 _bss_start = .
*(.bss)
*(COMMON)
COMMON 0x0000000000002f00 0x10 main.o
0x0 (size before relaxing)
0x0000000000002f00 clock
0x0000000000002f04 min
0x0000000000002f05 hour
0x0000000000002f06 sec
0x0000000000002f08 countup
0x0000000000002f0c onesec
0x0000000000002f10 _end = .
 
.stack 0x0000000000003e00 0x0
0x0000000000003e00 _stack = .
*(.stack)
OUTPUT(main.elf elf32-sh)
 
.comment 0x0000000000000000 0x26
.comment 0x0000000000000000 0x26 main.o
/startup/sh.x
0,0 → 1,56
/**************************************
SuperH (SH-2) C Compiler Linker Script
**************************************/
 
OUTPUT_FORMAT("elf32-sh")
OUTPUT_ARCH(sh)
 
MEMORY
{
ram : o = 0x00002000, l = 0x1e00
stack : o = 0x00003e00, l = 0x0200
}
 
SECTIONS
{
.text : {
*(.text)
*(.strings)
_etext = . ;
} > ram
 
.tors : {
___ctors = . ;
*(.ctors)
___ctors_end = . ;
___dtors = . ;
*(.dtors)
___dtors_end = . ;
} > ram
 
.rodata : {
*(.rodata)
} >ram
 
__idata_start = ADDR(.text) + SIZEOF(.text) + SIZEOF(.tors) + SIZEOF(.rodata);
.data : AT(__idata_start) {
__idata_start = .;
_sdata = . ;
*(.data)
_edata = . ;
} > ram
__idata_end = __idata_start + SIZEOF(.data);
 
.bss : {
_bss_start = .;
*(.bss)
*(COMMON)
_end = .;
} >ram
 
.stack :
{
_stack = .;
*(.stack)
} > stack
}
/startup/crt0.S
0,0 → 1,326
/****************************************
SuperH (SH-2) C compiler Startup Routine
----------------------------------------
Rev1. March 21, 2003 by Thorn Aitch
****************************************/
 
/********************
Section: .text (ROM)
********************/
.section .text
 
/************
Vector Table
************/
_vector_top:
.long _start ! #000
.long _stack+0x200 ! #001
.long _start ! #002
.long _stack+0x200 ! #003
.long _gnrl_ilgl ! #004
.long _unexpected ! #005
.long _slot_ilgl ! #006
.long _unexpected ! #007
.long _unexpected ! #008
.long _cpuerr ! #009
.long _dmaerr ! #010
.long _nmi ! #011
.long _unexpected ! #012
.long _unexpected ! #013
.long _unexpected ! #014
.long _unexpected ! #015
.long _unexpected ! #016
.long _unexpected ! #017
.long _unexpected ! #018
.long _unexpected ! #019
.long _unexpected ! #020
.long _unexpected ! #021
.long _unexpected ! #022
.long _unexpected ! #023
.long _unexpected ! #024
.long _unexpected ! #025
.long _unexpected ! #026
.long _unexpected ! #027
.long _unexpected ! #028
.long _unexpected ! #029
.long _unexpected ! #030
.long _unexpected ! #031
.long _trap ! #032
.long _trap ! #033
.long _trap ! #034
.long _trap ! #035
.long _trap ! #036
.long _trap ! #037
.long _trap ! #038
.long _trap ! #039
.long _trap ! #040
.long _trap ! #041
.long _trap ! #042
.long _trap ! #043
.long _trap ! #044
.long _trap ! #045
.long _trap ! #046
.long _trap ! #047
.long _trap ! #048
.long _trap ! #049
.long _trap ! #050
.long _trap ! #051
.long _trap ! #052
.long _trap ! #053
.long _trap ! #054
.long _trap ! #055
.long _trap ! #056
.long _trap ! #057
.long _trap ! #058
.long _trap ! #059
.long _trap ! #060
.long _trap ! #061
.long _trap ! #062
.long _trap ! #063
.long _irq0 ! #064
.long _irq1 ! #065
.long _irq2 ! #066
.long _irq3 ! #067
.long _irq4 ! #068
.long _irq5 ! #069
.long _irq6 ! #070
.long _irq7 ! #071
 
/***************
General Illegal
Slot Illegal
***************/
_gnrl_ilgl:
_slot_ilgl:
mov.l _pillegal, r0
jsr @r0
nop
_restart:
mov.l _pvector_top, r1
mov.l @r1, r0
jmp @r0
mov.l @(4, r1), r15
 
/*****************
CPU Address Error
DMA Address Error
Unexpected Vector
*****************/
_cpuerr:
_dmaerr:
_unexpected:
mov.l _perror, r0
jsr @r0
nop
bra _restart
nop
 
/****************************
NMI (Non Maskable Interrupt)
****************************/
_nmi:
stc.l gbr, @-r15
stc.l vbr, @-r15
sts.l mach, @-r15
sts.l macl, @-r15
sts.l pr, @-r15
mov.l r14, @-r15
mov.l r13, @-r15
mov.l r12, @-r15
mov.l r11, @-r15
mov.l r10, @-r15
mov.l r9, @-r15
mov.l r8, @-r15
mov.l r7, @-r15
mov.l r6, @-r15
mov.l r5, @-r15
mov.l r4, @-r15
mov.l r3, @-r15
mov.l r2, @-r15
mov.l r1, @-r15
mov.l r0, @-r15
mov.l _pnmi_handler, r0
jsr @r0
nop
mov.l @r15+, r0
mov.l @r15+, r1
mov.l @r15+, r2
mov.l @r15+, r3
mov.l @r15+, r4
mov.l @r15+, r5
mov.l @r15+, r6
mov.l @r15+, r7
mov.l @r15+, r8
mov.l @r15+, r9
mov.l @r15+, r10
mov.l @r15+, r11
mov.l @r15+, r12
mov.l @r15+, r13
mov.l @r15+, r14
lds.l @r15+, pr
lds.l @r15+, macl
lds.l @r15+, mach
ldc.l @r15+, vbr
ldc.l @r15+, gbr
rte
nop
 
/***********************
IRQ (Interrupt Request)
***********************/
_irq0:
_irq1:
_irq2:
_irq3:
_irq4:
_irq5:
_irq6:
_irq7:
stc.l gbr, @-r15
stc.l vbr, @-r15
sts.l mach, @-r15
sts.l macl, @-r15
sts.l pr, @-r15
mov.l r14, @-r15
mov.l r13, @-r15
mov.l r12, @-r15
mov.l r11, @-r15
mov.l r10, @-r15
mov.l r9, @-r15
mov.l r8, @-r15
mov.l r7, @-r15
mov.l r6, @-r15
mov.l r5, @-r15
mov.l r4, @-r15
mov.l r3, @-r15
mov.l r2, @-r15
mov.l r1, @-r15
mov.l r0, @-r15
mov.l _pirq_handler, r0
jsr @r0
nop
mov.l @r15+, r0
mov.l @r15+, r1
mov.l @r15+, r2
mov.l @r15+, r3
mov.l @r15+, r4
mov.l @r15+, r5
mov.l @r15+, r6
mov.l @r15+, r7
mov.l @r15+, r8
mov.l @r15+, r9
mov.l @r15+, r10
mov.l @r15+, r11
mov.l @r15+, r12
mov.l @r15+, r13
mov.l @r15+, r14
lds.l @r15+, pr
lds.l @r15+, macl
lds.l @r15+, mach
ldc.l @r15+, vbr
ldc.l @r15+, gbr
rte
nop
 
/************
TRAP Handler
************/
_trap:
stc.l gbr, @-r15
stc.l vbr, @-r15
sts.l mach, @-r15
sts.l macl, @-r15
sts.l pr, @-r15
mov.l r14, @-r15
mov.l r13, @-r15
mov.l r12, @-r15
mov.l r11, @-r15
mov.l r10, @-r15
mov.l r9, @-r15
mov.l r8, @-r15
mov.l r7, @-r15
mov.l r6, @-r15
mov.l r5, @-r15
mov.l r4, @-r15
mov.l r3, @-r15
mov.l r2, @-r15
mov.l r1, @-r15
mov.l r0, @-r15
mov.l _ptrap_handler, r0
jsr @r0
nop
mov.l @r15+, r0
mov.l @r15+, r1
mov.l @r15+, r2
mov.l @r15+, r3
mov.l @r15+, r4
mov.l @r15+, r5
mov.l @r15+, r6
mov.l @r15+, r7
mov.l @r15+, r8
mov.l @r15+, r9
mov.l @r15+, r10
mov.l @r15+, r11
mov.l @r15+, r12
mov.l @r15+, r13
mov.l @r15+, r14
lds.l @r15+, pr
lds.l @r15+, macl
lds.l @r15+, mach
ldc.l @r15+, vbr
ldc.l @r15+, gbr
rte
nop
 
/************
Main Routine
************/
.org _vector_top + 0x400
_start:
mov.l _pvector_top, r8
ldc r8, vbr
mov #0x00, r8
ldc r8, sr
mov.l _pmain_sh, r8
jsr @r8
mov #0, r14
 
_endless:
bra _endless
nop
 
.align 4
_pmain_sh : .long _main_sh
_pvector_top: .long _vector_top
_pillegal: .long _illegal
_perror: .long _error
_pnmi_handler: .long _nmi_handler
_pirq_handler: .long _irq_handler
_ptrap_handler: .long _trap_handler
 
/**********************
Section: .rodata (ROM)
**********************/
.section .rodata
.align 4
 
/********************
Section: .data (RAM)
********************/
.section .data
.align 4
 
/*******************
Section: .bss (RAM)
*******************/
.section .bss
.align 4
 
/*********************
Section: .stack (RAM)
*********************/
.section .stack
.align 4
_stack:
.end
 
/dump
0,0 → 1,4
#!/bin/bash
 
sh-elf-objdump -D -msh2 $1 | less
 
dump Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: main.s =================================================================== --- main.s (nonexistent) +++ main.s (revision 12) @@ -0,0 +1,638 @@ + .file "main.c" +gcc2_compiled.: +.section .rodata + .align 2 +.LC0: + .string "" + .text + .align 2 + .global _main_sh + .type _main_sh,@function +_main_sh: + mov.l r8,@-r15 + mov.l r14,@-r15 + sts.l pr,@-r15 + add #-28,r15 + mov r15,r14 + mov r14,r1 + mov.l .L10,r2 + mov r14,r1 + mov #17,r3 + mov r15,r7 + mov r1,r4 + mov r2,r5 + mov r3,r6 + mov.l .L11,r8 + jsr @r8 + nop + mov.l r14,@(20,r14) + mov r15,r1 + mov.l .L12,r8 + jsr @r8 + nop + mov r15,r1 + mov.l .L13,r8 + jsr @r8 + nop + mov r15,r1 + mov.w .L14,r2 + mov #0,r4 + mov r2,r5 + mov.l .L15,r8 + jsr @r8 + nop +.L3: + mov.l @(20,r14),r1 + mov.b @r1,r2 + extu.b r2,r1 + tst r1,r1 + bf .L5 + bra .L4 + nop + .align 2 +.L5: + mov r15,r1 + mov.l .L13,r8 + jsr @r8 + nop + mov r15,r2 + mov r14,r1 + add #20,r1 + mov.l @r1,r2 + mov.b @r2,r7 + extu.b r7,r3 + add #1,r2 + mov.l r2,@r1 + mov #1,r4 + mov r3,r5 + mov.l .L15,r8 + jsr @r8 + nop + bra .L3 + nop + .align 2 +.L4: + mov r14,r1 + mov r14,r2 + add #24,r2 + mov #0,r1 + mov.b r1,@r2 +.L6: + bra .L8 + nop + bra .L7 + nop + .align 2 +.L8: + mov r14,r1 + mov r14,r2 + add #24,r2 + mov.b @r2,r1 + extu.b r1,r2 + mov r2,r1 + shlr2 r1 + shlr2 r1 + extu.b r1,r2 + tst r2,r2 + bf .L9 + mov r15,r1 + mov.l .L13,r8 + jsr @r8 + nop + mov r15,r1 + mov.w .L16,r2 + mov #0,r4 + mov r2,r5 + mov.l .L15,r8 + jsr @r8 + nop +.L9: + mov r15,r1 + mov.l .L13,r8 + jsr @r8 + nop + mov r15,r1 + mov r14,r2 + mov r14,r1 + add #24,r1 + mov.b @r1,r2 + mov r2,r3 + add #1,r3 + mov.b r3,@r1 + extu.b r2,r1 + mov #1,r4 + mov r1,r5 + mov.l .L15,r8 + jsr @r8 + nop + bra .L6 + nop + .align 2 +.L7: +.L2: + add #28,r14 + mov r14,r15 + lds.l @r15+,pr + mov.l @r15+,r14 + mov.l @r15+,r8 + rts + nop + .align 1 +.L14: + .short 128 +.L16: + .short 192 +.L17: + .align 2 +.L10: + .long .LC0 +.L11: + .long _memcpy +.L12: + .long _lcdinit +.L13: + .long _lcdready +.L15: + .long _lcdwr +.Lfe1: + .size _main_sh,.Lfe1-_main_sh + .align 2 + .global _lcdready + .type _lcdready,@function +_lcdready: + mov.l r8,@-r15 + mov.l r14,@-r15 + sts.l pr,@-r15 + mov r15,r14 +.L19: + mov r15,r1 + mov #0,r4 + mov.l .L22,r8 + jsr @r8 + nop + mov.w .L23,r1 + and r0,r1 + extu.b r1,r2 + tst r2,r2 + bf .L21 + bra .L20 + nop + .align 2 +.L21: + bra .L19 + nop + .align 2 +.L20: +.L18: + mov r14,r15 + lds.l @r15+,pr + mov.l @r15+,r14 + mov.l @r15+,r8 + rts + nop + .align 1 +.L23: + .short 128 +.L24: + .align 2 +.L22: + .long _lcdrd +.Lfe2: + .size _lcdready,.Lfe2-_lcdready + .align 2 + .global _lcdrd + .type _lcdrd,@function +_lcdrd: + mov.l r14,@-r15 + add #-12,r15 + mov r15,r14 + mov.l r4,@r14 + mov.l .L34,r1 + mov r14,r3 + mov r14,r2 + add #3,r2 + mov r1,r3 + add #2,r1 + mov.b @r2,r3 + mov #1,r2 + and r3,r2 + mov.b @r1,r3 + mov.w .L35,r7 + and r3,r7 + mov r7,r3 + or r2,r3 + mov.b r3,@r1 + mov.l .L34,r1 + mov r1,r2 + add #2,r1 + mov.b @r1,r2 + mov #2,r3 + or r2,r3 + mov.b r3,@r1 + mov.l .L34,r1 + mov r1,r2 + add #2,r1 + mov.b @r1,r2 + mov.w .L36,r3 + and r2,r3 + mov.b r3,@r1 + mov r14,r2 + mov r14,r1 + add #8,r1 + mov.l .L34,r2 + mov.b @r2,r3 + mov.b r3,@r1 + mov r14,r2 + mov r14,r1 + add #8,r1 + mov.l .L34,r2 + mov.b @r2,r3 + mov.b r3,@r1 + mov r14,r2 + mov r14,r1 + add #8,r1 + mov.l .L34,r2 + mov.b @r2,r3 + mov.b r3,@r1 + mov.l .L34,r1 + mov r1,r2 + add #2,r1 + mov.b @r1,r2 + mov #4,r3 + or r2,r3 + mov.b r3,@r1 + mov #0,r1 + mov.l r1,@(4,r14) +.L26: + mov.l @(4,r14),r1 + mov #25,r2 + cmp/gt r2,r1 + bf .L29 + bra .L27 + nop + .align 2 +.L29: + mov r14,r2 + mov r14,r1 + add #8,r1 + mov.l .L34,r2 + mov.b @r2,r3 + mov.b r3,@r1 +.L28: + mov.l @(4,r14),r1 + mov r1,r2 + add #1,r2 + mov.l r2,@(4,r14) + bra .L26 + nop + .align 2 +.L27: + mov r14,r2 + mov r14,r1 + add #9,r1 + mov.l .L34,r3 + mov r3,r2 + add #3,r3 + mov.b @r3,r2 + mov.b r2,@r1 + mov.l .L34,r1 + mov r1,r2 + add #2,r1 + mov.b @r1,r2 + mov.w .L36,r3 + and r2,r3 + mov.b r3,@r1 + mov #0,r1 + mov.l r1,@(4,r14) +.L30: + mov.l @(4,r14),r1 + mov #25,r2 + cmp/gt r2,r1 + bf .L33 + bra .L31 + nop + .align 2 +.L33: + mov r14,r2 + mov r14,r1 + add #8,r1 + mov.l .L34,r2 + mov.b @r2,r3 + mov.b r3,@r1 +.L32: + mov.l @(4,r14),r1 + mov r1,r2 + add #1,r2 + mov.l r2,@(4,r14) + bra .L30 + nop + .align 2 +.L31: + mov r14,r1 + mov r14,r2 + add #9,r2 + mov.b @r2,r3 + extu.b r3,r1 + mov r1,r0 + bra .L25 + nop + .align 2 +.L25: + add #12,r14 + mov r14,r15 + mov.l @r15+,r14 + rts + nop + .align 1 +.L35: + .short 254 +.L36: + .short 251 +.L37: + .align 2 +.L34: + .long -1412628480 +.Lfe3: + .size _lcdrd,.Lfe3-_lcdrd + .align 2 + .global _lcdwr + .type _lcdwr,@function +_lcdwr: + mov.l r14,@-r15 + add #-16,r15 + mov r15,r14 + mov.l r4,@r14 + mov r5,r1 + mov r14,r2 + mov r14,r3 + add #4,r3 + mov.b r1,@r3 + mov.l .L47,r1 + mov r1,r2 + add #3,r1 + mov r14,r2 + mov r14,r3 + add #4,r3 + mov.b @r3,r2 + mov.b r2,@r1 + mov.l .L47,r1 + mov r14,r3 + mov r14,r2 + add #3,r2 + mov r1,r3 + add #2,r1 + mov.b @r2,r3 + mov #1,r2 + and r3,r2 + mov.b @r1,r3 + mov.w .L48,r7 + and r3,r7 + mov r7,r3 + or r2,r3 + mov.b r3,@r1 + mov.l .L47,r1 + mov r1,r2 + add #2,r1 + mov.b @r1,r2 + mov.w .L49,r3 + and r2,r3 + mov.b r3,@r1 + mov.l .L47,r1 + mov r1,r2 + add #2,r1 + mov.b @r1,r2 + mov.w .L50,r3 + and r2,r3 + mov.b r3,@r1 + mov r14,r2 + mov r14,r1 + add #12,r1 + mov.l .L47,r2 + mov.b @r2,r3 + mov.b r3,@r1 + mov r14,r2 + mov r14,r1 + add #12,r1 + mov.l .L47,r2 + mov.b @r2,r3 + mov.b r3,@r1 + mov r14,r2 + mov r14,r1 + add #12,r1 + mov.l .L47,r2 + mov.b @r2,r3 + mov.b r3,@r1 + mov.l .L47,r1 + mov r1,r2 + add #2,r1 + mov.b @r1,r2 + mov #4,r3 + or r2,r3 + mov.b r3,@r1 + mov #0,r1 + mov.l r1,@(8,r14) +.L39: + mov.l @(8,r14),r1 + mov #25,r2 + cmp/gt r2,r1 + bf .L42 + bra .L40 + nop + .align 2 +.L42: + mov r14,r2 + mov r14,r1 + add #12,r1 + mov.l .L47,r2 + mov.b @r2,r3 + mov.b r3,@r1 +.L41: + mov.l @(8,r14),r1 + mov r1,r2 + add #1,r2 + mov.l r2,@(8,r14) + bra .L39 + nop + .align 2 +.L40: + mov.l .L47,r1 + mov r1,r2 + add #2,r1 + mov.b @r1,r2 + mov.w .L50,r3 + and r2,r3 + mov.b r3,@r1 + mov #0,r1 + mov.l r1,@(8,r14) +.L43: + mov.l @(8,r14),r1 + mov #25,r2 + cmp/gt r2,r1 + bf .L46 + bra .L44 + nop + .align 2 +.L46: + mov r14,r2 + mov r14,r1 + add #12,r1 + mov.l .L47,r2 + mov.b @r2,r3 + mov.b r3,@r1 +.L45: + mov.l @(8,r14),r1 + mov r1,r2 + add #1,r2 + mov.l r2,@(8,r14) + bra .L43 + nop + .align 2 +.L44: +.L38: + add #16,r14 + mov r14,r15 + mov.l @r15+,r14 + rts + nop + .align 1 +.L48: + .short 254 +.L49: + .short 253 +.L50: + .short 251 +.L51: + .align 2 +.L47: + .long -1412628480 +.Lfe4: + .size _lcdwr,.Lfe4-_lcdwr + .align 2 + .global _lcdinit + .type _lcdinit,@function +_lcdinit: + mov.l r8,@-r15 + mov.l r14,@-r15 + sts.l pr,@-r15 + add #-4,r15 + mov r15,r14 + mov r15,r1 + mov #0,r4 + mov #48,r5 + mov.l .L61,r8 + jsr @r8 + nop + mov #0,r1 + mov.l r1,@r14 +.L53: + mov.l @r14,r1 + mov.l .L62,r2 + cmp/gt r2,r1 + bf .L55 + bra .L54 + nop + .align 2 +.L56: +.L55: + mov.l @r14,r1 + mov r1,r2 + add #1,r2 + mov.l r2,@r14 + bra .L53 + nop + .align 2 +.L54: + mov r15,r1 + mov #0,r4 + mov #48,r5 + mov.l .L61,r8 + jsr @r8 + nop + mov #0,r1 + mov.l r1,@r14 +.L57: + mov.l @r14,r1 + mov.w .L63,r2 + cmp/gt r2,r1 + bf .L59 + bra .L58 + nop + .align 2 +.L60: +.L59: + mov.l @r14,r1 + mov r1,r2 + add #1,r2 + mov.l r2,@r14 + bra .L57 + nop + .align 2 +.L58: + mov r15,r1 + mov #0,r4 + mov #48,r5 + mov.l .L61,r8 + jsr @r8 + nop + mov r15,r1 + mov.l .L64,r8 + jsr @r8 + nop + mov r15,r1 + mov #0,r4 + mov #56,r5 + mov.l .L61,r8 + jsr @r8 + nop + mov r15,r1 + mov.l .L64,r8 + jsr @r8 + nop + mov r15,r1 + mov #0,r4 + mov #12,r5 + mov.l .L61,r8 + jsr @r8 + nop + mov r15,r1 + mov.l .L64,r8 + jsr @r8 + nop + mov r15,r1 + mov #0,r4 + mov #1,r5 + mov.l .L61,r8 + jsr @r8 + nop + mov r15,r1 + mov.l .L64,r8 + jsr @r8 + nop + mov r15,r1 + mov #0,r4 + mov #6,r5 + mov.l .L61,r8 + jsr @r8 + nop +.L52: + add #4,r14 + mov r14,r15 + lds.l @r15+,pr + mov.l @r15+,r14 + mov.l @r15+,r8 + rts + nop + .align 1 +.L63: + .short 4999 +.L65: + .align 2 +.L61: + .long _lcdwr +.L62: + .long 204999 +.L64: + .long _lcdready +.Lfe5: + .size _lcdinit,.Lfe5-_lcdinit + .ident "GCC: (GNU) 2.95.3 20010315 (release)" Index: main.c =================================================================== --- main.c (nonexistent) +++ main.c (revision 12) @@ -0,0 +1,837 @@ +//=============================== +// Degital Clock using IRQ Timer +//------------------------------- +// for VirtexE Evaluation Board +// Apr.30 2003 Ver.1 +//=============================== + +//====================================================== +// Address Map +//====================================================== +// address sz wt wd device +// 00000000-00001FFF 8K 0 32 ROM (code) +// 00002000-00003DFF 6K 0 32 RAM (data) +// 00003E00-00003FFF 512 0 32 RAM (stack) +// +// 00000000-0000FFFF 64K 0 32 RAM (shadow every 16KB) +// 00010000-0001FFFF 64K 3 32 RAM (shadow every 16KB) +// 00020000-0002FFFF 64K 0 16 RAM (shadow every 16KB) +// 00030000-0003FFFF 64K 3 16 RAM (shadow every 16KB) +// 00040000-ABCCFFFF (shadow RAM) +// ABCD0000-ABCD00FF 256 3 32 PIO (shadow every 4B) +// ABCD0100-ABCD01FF 256 3 32 UART(shadow every 4B) +// ABCD0200-ABCD02FF 256 3 32 SYS (shadow every 8B) +// ABCD0300-FFFBFFFF (shadow RAM) +// FFFC0000-FFFCFFFF 64K 0 32 RAM (shadow every 16KB) +// FFFD0000-FFFDFFFF 64K 3 32 RAM (shadow every 16KB) +// FFFE0000-FFFEFFFF 64K 0 16 RAM (shadow every 16KB) +// FFFF0000-FFFFFFFF 64K 3 16 RAM (shadow every 16KB) +// +//====================================================== +// PORT OUTPUT +//====================================================== +// ABCD0000 : reserved +// 31 30 29 28 27 26 25 24 +// 7 6 5 4 3 2 1 0 +// ----------------------------------------------- +// | | | | | | | | | +// -----------------------------------------------; +// +// ABCD0001 : KEYYO (Key SCAN Y-axis out) +// 23 22 21 20 19 18 17 16 +// 7 6 5 4 3 2 1 0 +// ----------------------------------------------- +// | | | | KY4 | KY3 | KY2 | KY1 | KY0 | +// ----------------------------------------------- +// +// ABCD0002 : LCDCON (LCD Control Signal) +// 15 14 13 12 11 10 9 8 +// 7 6 5 4 3 2 1 0 +// ----------------------------------------------- +// | | | | | | E | R/W | RS | +// ----------------------------------------------- +// +// ABCD0003 : LCDOUT (Write Data to LCD) +// 7 6 5 4 3 2 1 0 +// 7 6 5 4 3 2 1 0 +// ----------------------------------------------- +// | DW7 | DW6 | DW5 | DW4 | DW3 | DW2 | DW1 | DW0 | +// ----------------------------------------------- +// +//====================================================== +// PORT INPUT +//====================================================== +// ABCD0000 : reserved +// 31 30 29 28 27 26 25 24 +// 7 6 5 4 3 2 1 0 +// ----------------------------------------------- +// | | | | | | | | | +// -----------------------------------------------; +// +// ABCD0001 : KEYXI (Key SCAN X-axis in) +// 23 22 21 20 19 18 17 16 +// 7 6 5 4 3 2 1 0 +// ----------------------------------------------- +// | | | | KX4 | KX3 | KX2 | KX1 | KX0 | +// ----------------------------------------------- +// +// ABCD0002 : reserved +// 15 14 13 12 11 10 9 8 +// 7 6 5 4 3 2 1 0 +// ----------------------------------------------- +// | | | | | | | | | +// ----------------------------------------------- +// +// ABCD0003 : LCDIN (Read Data from LCD) +// 7 6 5 4 3 2 1 0 +// 7 6 5 4 3 2 1 0 +// ----------------------------------------------- +// | DR7 | DR6 | DR5 | DR4 | DR3 | DR2 | DR1 | DR0 | +// ----------------------------------------------- +// +//====================================================== +// UART: SASC (www.opencores.com) +// Simple Asynchronous Serial Communication Device +//====================================================== +// ABCD0100 : UARTBG0 Baud Rate Generator Div0 (R/W) +// 31 30 29 28 27 26 25 24 +// 7 6 5 4 3 2 1 0 +// ----------------------------------------------- +// | B07 | B06 | B05 | B04 | B03 | B02 | B01 | B00 | +// ----------------------------------------------- +// +// ABCD0101 : UARTBG1 Baud Rate Generator Div1 (R/W) +// 23 22 21 20 19 18 17 16 +// 7 6 5 4 3 2 1 0 +// ----------------------------------------------- +// | B17 | B16 | B15 | B14 | B13 | B12 | B11 | B10 | +// ----------------------------------------------- +// +// ABCD0102 : UARTCON (TXF=full_o, RXE=empty_o) (R only) +// 15 14 13 12 11 10 9 8 +// 7 6 5 4 3 2 1 0 +// ----------------------------------------------- +// | | | | | | | TXF | RXE | +// ----------------------------------------------- +// +// ABCD0103 : UARTTXD(W only)/UARTRXD(R only) +// 7 6 5 4 3 2 1 0 +// 7 6 5 4 3 2 1 0 +// ----------------------------------------------- +// | TR7 | TR6 | TR5 | TR4 | TR3 | TR2 | TR1 | TR0 | +// ----------------------------------------------- +// +//====================================================== +// System Controller +// Interrupt and Exception Controller +//====================================================== +// ABCD0200 : INTCTL Interrupt Control (32bit R/W only) +// 31 30 29 28 27 26 25 24 +// ----------------------------------------------- +// |E_NMI|E_IRQ|E_CER|E_DER|E_MRS| |TMRON|BRKON| +// ----------------------------------------------- +// 23 22 21 20 19 18 17 16 +// ----------------------------------------------- +// |ILVL3|ILVL2|ILVL1|ILVL0|IVEC7|IVEC6|IVEC5|IVEC4| +// ----------------------------------------------- +// 15 14 13 12 11 10 9 8 +// ----------------------------------------------- +// |IVEC3|IVEC2|IVEC1|IVEC0|TMR11|TMR10|TMR09|TMR08| +// ----------------------------------------------- +// 7 6 5 4 3 2 1 0 +// ----------------------------------------------- +// |TMR07|TMR06|TMR05|TMR04|TMR03|TMR02|TMR01|TMR00| +// ----------------------------------------------- +// bit31: E_NMI Emulate NMI Interrupt (W only) +// bit30: E_IRQ Emulate IRQ Interrupt (W only) +// bit29: E_CER Emulate CPU Address Error (W only) +// bit28: E_DER Emulate DMA Address Error (W only) +// bit27: E_MRS Emulate Manual Reset (W only) +// bit26: reserved +// bit25: TMRON INTTMR OFF/ON (0:OFF, 1:ON) +// bit24: BRKON Address Break(NMI) OFF/ON (0:OFF, 1:ON) +// bit23: ILVL3 IRQ ILevel 3 +// bit22: ILVL2 IRQ ILevel 2 +// bit21: ILVL1 IRQ ILevel 1 +// bit20: ILVL0 IRQ ILevel 0 +// bit19: IVEC7 IRQ Vector 7 +// bit18: IVEC6 IRQ Vector 6 +// bit17: IVEC5 IRQ Vector 5 +// bit16: IVEC4 IRQ Vector 4 +// bit15: IVEC3 IRQ Vector 3 +// bit14: IVEC2 IRQ Vector 2 +// bit13: IVEC1 IRQ Vector 1 +// bit12: IVEC0 IRQ Vector 0 +// bit11: TMR11 (12 bit interval timer to generate IRQ) +// ... +// bit 0: TMR00 (12 bit interval timer to generate IRQ) +// +// ABCD0204 : BRKADR Break Address (16bit R/W only) +// 15 14 13 12 11 10 9 8 +// ----------------------------------------------- +// |ADR15|ADR14|ADR13|ADR12|ADR11|ADR10|ADR09|ADR08| +// ----------------------------------------------- +// 7 6 5 4 3 2 1 0 +// ----------------------------------------------- +// |ADR07|ADR06|ADR05|ADR04|ADR03|ADR02|ADR01|ADR00| +// ----------------------------------------------- +// bit15: ADR15 Break Address15 +// ... +// bit00: ADR00 Break Address00 +// + +#include "common.h" + +//================= +// Define Functions +//================= +void disp_time(void); +void int_timer(int onoff); +unsigned char command(unsigned char *data); +unsigned char hex2asc(unsigned char hex); +unsigned char asc2hex(unsigned char asc); + +void waitNms(unsigned char n); +unsigned char key_scan(); +unsigned char key_wait_on(void); +void key_wait_off(void); + +void lcd_disp_char(unsigned char data); +void lcd_disp_long(unsigned long data); +void lcd_cursor(unsigned char con); +void lcd_erase(unsigned char pos); +void lcd_message(unsigned char pos, unsigned char *pstr); +void lcd_disp(unsigned char chr); +void lcd_pos(unsigned char pos); +void lcd_ready(void); +unsigned char lcd_rd(int); +void lcd_wr(int, unsigned char); +void lcd_init(void); + +//---------------- +// Global Variables +//---------------- +unsigned char mes_welcome[] = "Interrupt! Clock"; +unsigned char mes_time[] = "Time----"; +unsigned char mes_hour[] = "Input Hour =? "; +unsigned char mes_min[] = "Input Min =? "; +unsigned char mes_sec[] = "Input Sec =? "; +unsigned char hour; +unsigned char min; +unsigned char sec; +unsigned long clock; +unsigned long onesec; +int countup; + +//============ +// IRQ Handler +//============ +void irq_handler(void) +{ + // Timer Interval = 50ns * 2^12 = 50ns * 4096 + // 1sec = 50ns * 2E+07 (0x01312d00) + + // clock onesec + // 00000000 00000000 + // 00000000 01312d00 + // ... + // 01313000 > 01312d00 + // 01313000 01312d00 + 01312d00 + // 01313000 02625A00 + // 00000000 01312A00 + // .... + + if (clock >= onesec) + { + onesec = onesec + 20000000 - clock; + clock = 0; + countup = 1; + } + clock = clock + 4096; +} + +//============ +// NMI Handler +//============ +void nmi_handler(void) +{ +} + +//============= +// TRAP Handler +//============= +void trap_handler(void) +{ +} + +//==================== +// Illegal Instruction +//==================== +void illegal(void) +{ +} + +//============== +// Address Error +//============== +void error(void) +{ +} + +//============= +// Main Routine +//============= +void main_sh(void) +{ + unsigned char key; + + //----------- + // Initialize + //----------- + key_wait_off(); + lcd_init(); + lcd_message(0, mes_welcome); + + hour = 0; + min = 0; + sec = 0; + clock = 0; + onesec = 20000000; + countup = 0; + + disp_time(); + int_timer(1); + + //---------------- + // Main Event Loop + //---------------- + while(1) + { + if (countup) + { + countup = 0; + + sec = sec + 1; + if ((sec % 16) >= 10) sec = sec + 6; + if (sec >= 0x60) sec = 0; + + if (sec == 0) min = min + 1; + if ((min % 16) >= 10) min = min + 6; + if (min >= 0x60) min = 0; + + if ((sec == 0) & (min == 0)) hour = hour + 1; + if ((hour % 16) >= 10) hour = hour + 6; + if (hour >= 0x24) hour = 0; + + disp_time(); + } + + //---------------- + // Adjust Function + //---------------- + if (key_scan() == KEYDAT) + { + waitNms(4); + int_timer(0); + + lcd_message(0, mes_hour); + do + { + key = command(&hour); + } while (hour >= 0x24); + disp_time(); + + lcd_message(0, mes_min); + do + { + key = command(&min); + } while (min >= 0x60); + disp_time(); + + lcd_message(0, mes_sec); + do + { + key = command(&sec); + } while (sec >= 0x60); + disp_time(); + + lcd_message(0, mes_welcome); + + key_wait_off(); + + clock = 0; + onesec = 20000000; + countup = 0; + int_timer(1); + } + } +} + +//**************************************************** +//* * +//* Service Utilities * +//* * +//**************************************************** + +//================== +// Display Time +//------------------ +// Input : none +// Output : none +//================== +void disp_time(void) +{ + lcd_message(16, mes_time); + lcd_disp_char(hour); + lcd_disp(':'); + lcd_disp_char(min); + lcd_disp(':'); + lcd_disp_char(sec); +} + +//======================================== +// Interrupt Timer ON/OFF +//---------------------------------------- +// Input : onoff = timer on(1)/off(0) +// Output : none +//======================================== +void int_timer(int onoff) +{ + if (onoff) + SYS.INTCTL = 0x02140fff; + else + SYS.INTCTL = 0x00040fff; +} + +//========================================= +// Command Handler +//----------------------------------------- +// Input : data = display char +// Output : command = input command +// data = input integer +//========================================= +unsigned char command(unsigned char *data) +{ + unsigned char key; + int i; + + lcd_pos(14); + lcd_disp_char(*data); + + lcd_cursor(1); + i = 0; + + do + { + if (i == 0) lcd_pos(14); + + key_wait_off(); + key = key_wait_on(); + if (key <= KEY9) + { + lcd_disp(hex2asc(key)); + *data = (*data & ~((0x0F) << ((1-i) * 4))) | (key << ((1-i) * 4)); + i = (i + 1) % 2; + } + } while (key != KEYDAT); + + lcd_cursor(0); + return(key); +} + +//============================= +// Convert Hex(nibble) to Ascii +//----------------------------- +// Input : hex (0x00-0x0F) +// Output : hex2asc +//============================= +unsigned char hex2asc(unsigned char hex) +{ + hex = hex & 0x0f; + if (hex <= 0x09) + return(hex + '0'); + else + return(hex - 0x0a + 'A'); +} + +//============================= +// Convert Ascii to Hex(nibble) +//----------------------------- +// Input : asc(0-9, A-F) +// Output : asc2hex +//============================= +unsigned char asc2hex(unsigned char asc) +{ + if (asc <= '9') + return((asc - '0') & 0x0f); + else + return((asc - 'A' + 0x0a) & 0x0f); +} + +//**************************************************** +//* * +//* Key Utilities * +//* * +//**************************************************** + +//=================================== +// Wait until Key On +//----------------------------------- +// Input : none +// Output : key = pushed key code +//=================================== +unsigned char key_wait_on(void) +{ + unsigned char key; + + while((key = key_scan()) == KEYNONE) waitNms(4); + + return(key); +} + +//=================== +// Wait until Key Off +//------------------- +// Input : none +// Output : none +//=================== +void key_wait_off(void) +{ + while(key_scan() != KEYNONE) waitNms(4); +} + +//=================================== +// Key Scan +//----------------------------------- +// Input : none +// Output : key = pushed key code +//=================================== +unsigned char key_scan() +{ + unsigned char keyx4; + unsigned char keyx3; + unsigned char keyx2; + unsigned char keyx1; + unsigned char keyx0; + + PORTO.KEYYO.BYTE = 0xef; // KEYY4 + waitNms(1); + keyx4 = PORTI.KEYXI.BYTE & 0x1f; + + PORTO.KEYYO.BYTE = 0xf7; // KEYY3 + waitNms(1); + keyx3 = PORTI.KEYXI.BYTE & 0x1f; + + PORTO.KEYYO.BYTE = 0xfb; // KEYY2 + waitNms(1); + keyx2 = PORTI.KEYXI.BYTE & 0x1f; + + PORTO.KEYYO.BYTE = 0xfd; // KEYY1 + waitNms(1); + keyx1 = PORTI.KEYXI.BYTE & 0x1f; + + PORTO.KEYYO.BYTE = 0xfe; // KEYY0 + waitNms(1); + keyx0 = PORTI.KEYXI.BYTE & 0x1f; + + switch(keyx4) + { + case 0x17 : return(KEYPUT); + case 0x1b : return(KEYGET); + case 0x1d : return(KEYRUN); + case 0x1e : return(KEYUTL); + } + switch(keyx3) + { + case 0x0f : return(KEYADR); + case 0x17 : return(KEYF); + case 0x1b : return(KEYE); + case 0x1d : return(KEYD); + case 0x1e : return(KEYC); + } + switch(keyx2) + { + case 0x0f : return(KEYINC); + case 0x17 : return(KEYB); + case 0x1b : return(KEYA); + case 0x1d : return(KEY9); + case 0x1e : return(KEY8); + } + switch(keyx1) + { + case 0x0f : return(KEYDEC); + case 0x17 : return(KEY7); + case 0x1b : return(KEY6); + case 0x1d : return(KEY5); + case 0x1e : return(KEY4); + } + switch(keyx0) + { + case 0x0f : return(KEYDAT); + case 0x17 : return(KEY3); + case 0x1b : return(KEY2); + case 0x1d : return(KEY1); + case 0x1e : return(KEY0); + } + return(KEYNONE); +} + +//================== +// Wait n ms +//------------------ +// Input : n ms +// Output : none +//================== +void waitNms(unsigned char n) +{ + int i, j; + unsigned char dummy; + + for (i = 0 ; i < n ; i++) + { + // 1ms = 20000 * 50ns (20MHz) + for (j = 0 ; i <= 10000 ; i++) dummy = PORTI.RESERVED_0; + } +} + +//**************************************************** +//* * +//* LCD Utilities * +//* * +//**************************************************** + +//====================================== +// LCD Display Char Hex data (2 digit) +//-------------------------------------- +// Input : data = display char data +// Output : none +//====================================== +void lcd_disp_char(unsigned char data) +{ + int i; + unsigned char digit; + + for (i = 1 ; i >= 0 ; i--) + { + digit = (unsigned char) (data / (1 << i * 4)) % 0x10; + lcd_disp(hex2asc(digit)); + } +} + +//====================================== +// LCD Display Long Hex data (8 digit) +//-------------------------------------- +// Input : data = display long data +// Output : none +//====================================== +void lcd_disp_long(unsigned long data) +{ + int i; + unsigned char digit; + + for (i = 7 ; i >= 0 ; i--) + { + digit = (unsigned char) (data / (1 << i * 4)) % 0x10; + lcd_disp(hex2asc(digit)); + } +} + +//================================ +// Cursor On/Off +//-------------------------------- +// Input : cur = off(0)/on(1) +// Output : none +//================================ +void lcd_cursor(unsigned char con) +{ + lcd_ready(); + if (con) + lcd_wr(INST, 0x0d); + else + lcd_wr(INST, 0x0c); +} + + +//=============================== +// Erase 1 line from the position +//------------------------------- +// Input : pos = position +// 1st line = 00-15 +// 2nd line = 16-31 +// Ouput : none +//=============================== +void lcd_erase(unsigned char pos) +{ + int i; + + lcd_pos(pos); + for (i = 0; i < 16; i++) lcd_disp(' '); +} + +//======================================== +// Print a Message from Current Position +//---------------------------------------- +// Input : pstr = message top address +// Outpur : none +//======================================== +void lcd_message(unsigned char pos, unsigned char *pstr) +{ + unsigned char *pmessage; + + lcd_pos(pos); + pmessage = pstr; + while (*pmessage) lcd_disp(*pmessage++); +} + +//========================================== +// Display One Character on Current Position +//------------------------------------------ +// Input : chr = display charcter +// Output : none +//========================================== +void lcd_disp(unsigned char chr) +{ + lcd_ready(); + lcd_wr(DATA, chr); +} + +//================================ +// Set LCD Display Position +//-------------------------------- +// Input : pos = position +// 1st line = 00-15 +// 2nd line = 16-31 +// Ouput : none +//================================ +void lcd_pos(unsigned char pos) +{ + unsigned char phypos; + + phypos = pos % 32; + if (phypos >= 16) + phypos = (phypos - 16) + 64; + phypos = phypos | 0x80; + + lcd_ready(); + lcd_wr(INST, phypos); +} + +//===================== +// Wait until LCD ready +//--------------------- +// Input : none +// Output : none +//===================== +void lcd_ready(void) +{ + while ((lcd_rd(INST) & 0x80) == 0x80); +} + +//================================= +// LCD Read +//--------------------------------- +// Input : rs (0=Instr,1=Data) +// Output : lcd_rd (Read Data) +//================================= +unsigned char lcd_rd(int rs) +{ + int i; + unsigned char dummy; + unsigned char data; + + PORTO.LCDCON.BYTE = 0x02 | (rs & 0x01); + + // wait 60ns = 2cyc@20MHz + dummy = PORTI.RESERVED_0; + dummy = PORTI.RESERVED_0; + + + PORTO.LCDCON.BYTE = 0x06 | (rs & 0x01); + + // wait 500ns = 10cyc@20MHz + for (i = 0 ; i <= 10 ; i++) dummy = PORTI.RESERVED_0; + + data = PORTI.LCDIN; + + PORTO.LCDCON.BYTE = 0x02 | (rs & 0x01); + + // wait 500ns = 10cyc@20MHz + for (i = 0 ; i <= 10 ; i++) dummy = PORTI.RESERVED_0; + + return(data); +} + +//================================= +// LCD Write +//--------------------------------- +// Input : rs (0=Instr,1=Data) +// wd (Write Data) +// Output : none +//================================= +void lcd_wr(int rs, unsigned char wd) +{ + int i; + unsigned char dummy; + + PORTO.LCDOUT = wd; + + PORTO.LCDCON.BYTE = 0x00 | (rs & 0x01); + + // wait 60ns = 2cyc@20MHz + dummy = PORTI.RESERVED_0; + dummy = PORTI.RESERVED_0; + + PORTO.LCDCON.BYTE = 0x04 | (rs & 0x01); + + // wait 500ns = 10cyc@20MHz + for (i = 0 ; i <= 10 ; i++) dummy = PORTI.RESERVED_0; + + PORTO.LCDCON.BYTE = 0x00 | (rs & 0x01); + + // wait 500ns = 10cyc@20MHz + for (i = 0 ; i <= 10 ; i++) dummy = PORTI.RESERVED_0; +} + +//================== +// LCD Initialize +//------------------ +// Input : none +// Output : none +//================== +void lcd_init(void) +{ + int i; + unsigned char dummy; + + lcd_wr(INST, 0x30); + + // wait 4100us=82000cyc@20MHz + for (i = 0 ; i < 82000 ; i++) dummy = PORTI.RESERVED_0; + + lcd_wr(INST, 0x30); + + // wait 100us=2000cyc@20MHz + for (i = 0 ; i < 2000 ; i++) dummy = PORTI.RESERVED_0; + + lcd_wr(INST, 0x30); + + // set function (8bit, 2lines) + lcd_ready(); + lcd_wr(INST, 0x38); + + // display (disp on, cursor off, blink off) + lcd_ready(); + lcd_wr(INST, 0x0c); + + // clear + lcd_ready(); + lcd_wr(INST, 0x01); + + // entry mode (increment, no-shift) + lcd_ready(); + lcd_wr(INST, 0x06); +} + +//=============== +// End of Program +//=============== Index: main.elf =================================================================== --- main.elf (nonexistent) +++ main.elf (revision 12) @@ -0,0 +1,20 @@ +ELF* 44 (  $@$@! !.! !.!.!.!.!8!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!@ ѿ`@+_п@ OO#OOO"////////v/f/V/F/6/&//г@ `abcdefghijklmnO&OOO'O+ OO#OOO"////////v/f/V/F/6/&//О@ `abcdefghijklmnO&OOO'O+ OO#OOO"////////v/f/V/F/6/&//Ј@ `abcdefghijklmnO&OOO'O+ H.HH $ $$$$@$ / brcb22 n +23(&2'"ar1,'o n // //no n/no n/no n/no n/Y//////O"A nUA TUA T! T! T! T#"ST#T!"TA SA Pa!E,RIap q`0f'q'ap_a1F'Pap!>a q"2A&J +6 HJ .../>  + $%>,! 7!.C! N!.V!.^!8c!i!o!u!{!!!!!$(!&$$$,$0$4$8$ $ $@%.*.2.Z;.zE.I,T,t|^. h+|<q/x..'/..'/)0$ +*8'./$*X +&(&+ ).2$@D?-xJ/O,(LW*0b+Pj$ +x..../&``.$ +/.(D$ +.*\X%>./ (,&.3+P,=+4./startup/crt0.S_vector_top_start_stack_gnrl_ilgl_unexpected_slot_ilgl_cpuerr_dmaerr_nmi_trap_irq0_irq1_irq2_irq3_irq4_irq5_irq6_irq7_pillegal_restart_pvector_top_perror_pnmi_handler_pirq_handler_ptrap_handler_pmain_sh_endless*ABS*main.cgcc2_compiled.libgcc1.Sdiv0longwayshortwayvshortwayret___ashlsi3_lcd_init_mes_time_lcd_pos_clock_etext__idata_end_asc2hex_bss_start_sdata_mes_min_hex2asc_min_waitNms_nmi_handler_lcd_cursor_key_wait_on_hour_main_sh_lcd_disp_char_int_timer_command_lcd_ready___dtors_irq_handler___sdivsi3_sec_lcd_wr_lcd_erase_lcd_rd_trap_handler___ctors_end_mes_hour_mes_sec___ctors_countup_disp_time_edata_error_end___udivsi3_key_scan_illegal__idata_start_lcd_disp_long_mes_welcome_onesec_key_wait_off___dtors_end_lcd_disp_lcd_message \ No newline at end of file Index: Makefile =================================================================== --- Makefile (nonexistent) +++ Makefile (revision 12) @@ -0,0 +1,76 @@ +#======================================== +# SuperH (SH-2) C Compiler Makefile +#---------------------------------------- +# Rev.1 March 21, 2003 by Thorn Aitch +#======================================== + +#------------- +# Command Path +#------------- +CMD_PATH = /usr/local/bin +CC = $(CMD_PATH)/sh-elf-gcc +OBJCOPY = $(CMD_PATH)/sh-elf-objcopy +SIZE = $(CMD_PATH)/sh-elf-size + +#------------- +# Output Files +#------------- +TARGET = main.srec +TARGET_ELF = main.elf +MAP_FILE = $(TARGET_ELF:.elf=.map) + +OUTPUT_FORMAT = srec --srec-forceS3 + +#------------------------- +# Compile and Link Options +#------------------------- +INCLUDES = -I./include +#CFLAGS = -m2 -g -Os $(INCLUDES) -Wall +CFLAGS = -m2 -Os $(INCLUDES) -Wall + +LDSCRIPT = startup/sh.x + +LDFLAGS = -m2 -T $(LDSCRIPT) -O3 -nostartfiles -Wl,-Map,$(MAP_FILE) + +#------------ +# Input Files +#------------ +STARTUP = crt0.S +LIBS = +SRCS = main.c +OBJS = $(STARTUP:.S=.o) $(LIBS:.c=.o) $(SRCS:.c=.o) + +#--------------- +# Make Operation +#--------------- +$(TARGET) : $(TARGET_ELF) + $(OBJCOPY) -v -O $(OUTPUT_FORMAT) $(TARGET_ELF) $(TARGET) + +$(TARGET_ELF) : $(OBJS) + $(CC) $(LDFLAGS) $(OBJS) -o $(TARGET_ELF) + $(SIZE) -Ax $(TARGET_ELF) + +$(OBJS) : Makefile + +clean : + rm -f *.o $(TARGET) $(TARGET_ELF) $(MAP_FILE) + +%.o : %.c + $(CC) -c $(CFLAGS) $< + +%.o : %.S + $(CC) -c $(CFLAGS) $< + +%.o : %.s + $(CC) -c $(CFLAGS) $< + +#------------------- +# Header and Startup +#------------------- +vpath %.h ./include +vpath %.S ./startup + +#------------------ +# Source and Object +#------------------ +main.o : main.c Index: common.h =================================================================== --- common.h (nonexistent) +++ common.h (revision 12) @@ -0,0 +1,131 @@ +//=============================== +// C Source Header +//------------------------------- +// for VirtexE Evaluation Board +// Apr.19 2003 Ver.1 +//=============================== + +//-------------------------- +// Peripheral I/O definition +//-------------------------- +struct st_porto +{ + unsigned char RESERVED_0; + union + { + unsigned char BYTE; + struct + { + unsigned char :3; + unsigned char KY4:1; + unsigned char KY3:1; + unsigned char KY2:1; + unsigned char KY1:1; + unsigned char KY0:1; + } BIT; + } KEYYO; + union + { + unsigned char BYTE; + struct + { + unsigned char :5; + unsigned char E :1; + unsigned char RW:1; + unsigned char RS:1; + } BIT; + } LCDCON; + unsigned char LCDOUT; +}; + +struct st_porti +{ + unsigned char RESERVED_0; + union + { + unsigned char BYTE; + struct + { + unsigned char :3; + unsigned char KX4:1; + unsigned char KX3:1; + unsigned char KX2:1; + unsigned char KX1:1; + unsigned char KX0:1; + } BIT; + } KEYXI; + unsigned char RESERVED_2; + unsigned char LCDIN; +}; + +struct st_uart +{ + unsigned char UARTBG0; + unsigned char UARTBG1; + union + { + unsigned char BYTE; + struct + { + unsigned char :6; + unsigned char TXF:1; + unsigned char RXE:1; + } BIT; + } UARTCON; + union + { + unsigned char TX; + unsigned char RX; + } BYTE; +}; + +struct st_sys +{ + unsigned long INTCTL; + unsigned short BRKADR; +}; + + +#define PORTO (*(volatile struct st_porto *)0xabcd0000) +#define PORTI (*(volatile struct st_porti *)0xabcd0000) +#define UART (*(volatile struct st_uart *)0xabcd0100) +#define SYS (*(volatile struct st_sys *)0xabcd0200) + +//----------- +// LCD Access +//----------- +#define INST 0 +#define DATA 1 + +//--------- +// Key Code +//--------- +#define KEY0 0 +#define KEY1 1 +#define KEY2 2 +#define KEY3 3 +#define KEY4 4 +#define KEY5 5 +#define KEY6 6 +#define KEY7 7 +#define KEY8 8 +#define KEY9 9 +#define KEYA 10 +#define KEYB 11 +#define KEYC 12 +#define KEYD 13 +#define KEYE 14 +#define KEYF 15 +#define KEYUTL 16 +#define KEYRUN 17 +#define KEYGET 18 +#define KEYPUT 19 +#define KEYADR 20 +#define KEYINC 21 +#define KEYDEC 22 +#define KEYDAT 23 +#define KEYNONE 255 + + + +

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.