易码技术论坛

 找回密码
 加入易码
搜索
查看: 514486|回复: 17

对于nc3000的lava解释器的研究成果

[复制链接]
发表于 2006-12-24 16:51:28 | 显示全部楼层
果然是不错的资料.感谢楼主的研究
发表于 2006-12-24 17:10:41 | 显示全部楼层
引用第0楼玄狼剑2006-12-24 15:29发表的“对于nc3000的lava解释器的研究成果”:
0xCD(PlayInit)  89F2 BCF6
0xCE(PlayFile)  89F4 BD16
0xCF(PlayStop)  89F6 BC65
0xD0(SetVolunme) 89F8 BCE6
0xD1(PlaySleep) 89FA BCFA

这几个不是808才有吗?
发表于 2006-12-24 17:16:01 | 显示全部楼层
有没有通讯的函数啊?
发表于 2006-12-26 16:07:49 | 显示全部楼层
哈哈,收了~
 楼主| 发表于 2007-1-1 08:50:42 | 显示全部楼层
nc3000也有声音播放函数,双语ok就用了这几个函数,不过没有通讯函数
发表于 2007-1-1 12:40:15 | 显示全部楼层
暂时不了解有什么用,收了先~~
发表于 2007-1-20 22:57:20 | 显示全部楼层
声音函数和TC800一样吗?
发表于 2007-1-21 10:41:45 | 显示全部楼层
引用第5楼玄狼剑2007-01-01 08:50发表的“”:
nc3000也有声音播放函数,双语ok就用了这几个函数,不过没有通讯函数
用什么编译器能编译它呢
 楼主| 发表于 2007-1-21 12:59:40 | 显示全部楼层
每个函数对应的伪代码都列在旁边,如果和tc808的伪代码一样就能用tc808的编译器或者yan的2.0编译器编译
发表于 2007-1-21 17:38:58 | 显示全部楼层
楼上的试过吗?
我用yan的编译了,运行时有下放显示类似双语ok的数字,但是毫无规律,有事还乱码
没有声音,而且yan的tc808.fun函数包里的PlayInit函数编译时貌似有bug,明明只要一个参数却偏偏要2个才能编译...
目前除了设置音量(SetVolume)外其他都没用.
 楼主| 发表于 2006-12-24 15:29:23 | 显示全部楼层 |阅读模式
  如果以下内容侵权,请版主删除

代码 地址在内存中的位置 代码开始地址(内存地址与文件地址的转换方式为:文件地址=内存地址-0x8000+0x100)

0x01 88B2 846E
0x02 88B4 8488
0x03 88B6 84A9
0x04 88B8 84D0
0x05 88BA 84DC
0x06 88BC 84EB
0x07 88BE 8506
0x08 88C0 8512
0x09 88C2 8521
0x0A 88C4 853F
0x0B 88C6 8551
0x0C 88C8 8563
0x0D 88CA 8266
0x0E 88CC 84CA
0x0F 88CE 84D6
0x10 88D0 84E5
0x11 88D2 8500
0x12 88D4 850C
0x13 88D6 851B
0x14 88D8 8536
0x15 88DA 8548
0x16 88DC 855A
0x17 88DE 856C
0x18 88E0 8575
0x19 88E2 857E
0x1A 88E4 859E
0x1B 88E6 85AF
0x1C 88E8 85D8
0x1D 88EA 881F
0x1E 88EC 8849
0x1F 88EE 8855
0x20 88F0 8861
0x21 88F2 831F
0x22 88F4 8328
0x23 88F6 83C7
0x24 88F8 83D0
0x25 88FA 85E1
0x26 88FC 83D9
0x27 88FE 83F4
0x28 8900 8404
0x29 8902 8414
0x2A 8904 82B5
0x2B 8906 82C8
0x2C 8908 82DB
0x2D 890A 83E2
0x2E 890C 83EB
0x2F 890E 8440
0x30 8910 8463
0x31 8912 8456
0x32 8914 844B
0x33 8916 841F
0x34 8918 8435
0x35 891A 87B9
0x36 891C 87FF
0x37 891E 8811
0x38 8920 8AE1
0x39 8922 8609
0x3A 8924 8661
0x3B 8926 8617
0x3C 8928 866F
0x3D 892A 867A
0x3E 892C 86C0
0x3F 892E 8715
0x40 8930 876C
0x41 8932 873C
0x42 8934 85C0
0x43 8936 85D1
0x44 8938 81D9
0x45 893A 8331
0x46 893C 833D
0x47 893E 8349
0x48 8940 8352
0x49 8942 835B
0x4A 8944 8364
0x4B 8946 8370
0x4C 8948 837C
0x4D 894A 8385
0x4E 894C 838E
0x4F 894E 8397
0x50 8950 83A0
0x51 8952 83A9
0x52 8954 88A7
0x53 8956 88A7
//NC3000的LAVA的基本伪指令只从0x01-0x53
//0x43,0x52,0x53的作用未知


代码 地址在内存中的位置 代码开始地址(内存地址与文件地址的转换方式为:文件地址=内存地址-0x8000+0x100)
0x80(putchar) 8958 9734
0x81(getchar) 895A 9A1A
0x82(printf)  895C 97EC
0x83(strcpy)  895E A029
0x84(strlen)  8960 A041
0x85(SetScreen)  8962 96C4
0x86(UpdataLCD)  8964 9724
0x87(Delay)    8966 A35B
0x88(WriteBlock) 8968 A9A7
0x89(Refresh)   896A A6F9
0x8A(TextOut)   896C A73A
0x8B(Block)    896E A883
0x8C(Rectangle)  8970 A889
0x8D(exit)     8972 876C
0x8E(ClearScreen) 8974 A6DA
0x8F(abs)   8976 8F93
0x90(rand)  8978 8FA0
0x91(srand)  897A 8FED
0x92(Locate) 897C 96E8
0x93(Inkey)  897E A3BB
0x94(Point)  8980 A5DF
0x95(GetPoint) 8982 A6B3
0x96(Line)   8984 B1A4
0x97(Box)    8986 A673
0x98(Circle)  8988 A605
0x99(Ellipse) 898A A638
0x9A(Beep)   898C 8B8F
0x9B(isalnum) 898E A17C
0x9C(isalpha) 8990 A172
0x9D(iscntrl) 8992 A190
0x9E(isdigit) 8994 A168
0x9F(isgraph) 8996 A1A6
0xA0(islower) 8998 A15E
0xA1(isprint) 899A A19A
0xA2(ispunct) 899C A1C0
0xA3(isspace) 899E A1B6
0xA4(isupper) 89A0 A14B
0xA5(isxdigit) 89A2 A186
0xA6(strcat)  89A4 A05E
0xA7(strchr)  89A6 A08D
0xA8(srrcmp)  89A8 A0BD
0xA9(strstr)  89AA A0EE
0xAA(tolower) 89AC A1DE
0xAB(toupper) 89AE A1F5
0xAC(memset)  89B0 A20C
0xAD(memcpy)  89B2 A236
0xAE(fopen)  89B4 9B1D
0xAF(fclose)  89B6 9BBF
0xB0(fread)  89B8 9DEB
0xB1(fwrite)  89BA 9DA3
0xB2(fseek)  89BC 9BE9
0xB3(ftell)  89BE 9CC5
0xB4(feof)   89C0 9BD0
0xB5(rewind)  89C2 9CEA
0xB6(getc)   89C4 9D1C
0xB7(putc)   89C6 9D5A
0xB8(sprintf) 89C8 9923
0xB9(MakeDir) 89CA 9B01
0xBA(DeleteFile) 89CC 9B0F
0xBB(Getms)    89CE A34D
0xBC(CheckKey)  89D0 A542
0xBD(memmove)   89D2 A26A
0xBE(Crc16)    89D4 BA07
0xBF(Secret)    89D6 BA5C
0xC0(ChDir)    89D8 9AD2
0xC1(FileList)  89DA 9ADB
0xC2(GetTime)   89DC A3D5
0xC3(SetTime)   89DE A450
0xC4(GetWord)   89E0 9A2A
0xC5(XDraw)    89E2 B0BF
0xC6(ReleaseKey) 89E4 A4FB
0xC7(GetBlock)  89E6 A8E9
0xC8(Sin)      89E8 90E2
0xC9(Cos)      89EA 9138
0xCA(FillArea)  89EC AF87
0xCB(PutKek)    89EE A3CB
0xCC(??)      89F0 0000  //这里可以用汇编添加一个新函数
0xCD(PlayInit)  89F2 BCF6
0xCE(PlayFile)  89F4 BD16
0xCF(PlayStop)  89F6 BC65
0xD0(SetVolunme) 89F8 BCE6
0xD1(PlaySleep)  89FA BCFA
//NC3000的全部函数就这么多
发表于 2008-5-7 22:25:23 | 显示全部楼层
rand函数的内部算法是什么?能反汇编一下吗?
发表于 2008-5-9 01:13:40 | 显示全部楼层
貌似就是移位与异或吧……
发表于 2008-5-9 08:02:08 | 显示全部楼层

是乘加
发表于 2008-6-11 16:22:49 | 显示全部楼层
具体是乘多少加多少呢?

还有srand貌似是输入乘了一个数,好像乘的是几百的数,而且不是整数……那个数到底是多少有人知道吗?
发表于 2008-6-11 22:07:21 | 显示全部楼层
rand的实现:
  1. #include<stdio.h>
  2. int seed;
  3. void srand(int);
  4. int  rand();

  5. int main(){
  6.     int loop;
  7.     srand(12345);
  8.     for(loop =0;loop<10;loop++) printf("%d,",rand());
  9. }

  10. void srand(int s){
  11.     seed =s;
  12. }
  13. int rand(){
  14.     seed = seed * 22695477 +1;
  15.     return (seed>>16)&0x7fff;
  16. }
复制代码

评分

参与人数 1小红花 +3 收起 理由
acme142857 + 3 精品文章

查看全部评分

发表于 2008-6-12 19:00:51 | 显示全部楼层
为什么都是从地址8192开始的?
发表于 2008-6-13 15:14:31 | 显示全部楼层

回复 16# 的帖子

测试通过,谢谢!
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-4-27 04:02 , Processed in 0.017516 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表