
附件 1:sybc.rar (2010-3-2 17:48, 1.06 K,下载次数: 64)
附件 2:sybc参数详解.gif (2010-3-10 12:40, 17.45 K,下载次数: 14)
![]()
附件 3:ddz59.GIF (2010-3-10 13:38, 23.49 K,下载次数: 1)
![]()
CODE: [Copy to clipboard]set a=a0=$fcA;a1=$fcA;a2=$fc2;a3=$fc3;a4=$fc4;a5=$fc5;a6=$fc6;a7=$fc7;a8=$fc8;a9=$fc9;a10=$fc10;a11=$fcJ;a12=$fcQ;a13=$fcK;a14=$fcS;a15=$fcY;a16=$fcB;a17=$fcN
set p%a:;=&set p%
cls
for /l %%a in (0,1,17) do set /a wz=11800+%%a*4&&(if %%a gtr 2 if %%a lss 8 set /a wz=!wz!-100)&&call :pa !wz! !pa%%a! ◆
pause
exit
:pb
call s7.com %1f1┏━━━━┓;$f1┃╳╳╳╳┃;$f1┃╳SYBN╳┃;$f1┃╳╳╳╳┃;$f1┃╳2010╳┃;$f1┃╳╳╳╳┃;$f1┗━━━━┛
goto :eof
:pa
call s7.com %1f1┏━━━━┓;:┃%2 $f1┃;:┃%3 斗 ┃;:┃ 地 ┃;:┃ 主 %2$f1┃;:┃ %3┃;:┗━━━━┛
goto :eof
附件 1:ddz.rar (2010-3-4 12:18, 1.68 K,下载次数: 22)
CODE: [Copy to clipboard][ Last edited by sl543001 on 2010-3-6 at 16:40 ]SET SYBCOM=A100;80BE AC00 23C 5472 3CAC 7501 BE13 282;0EEB 3CAC 743A 3C09 740D 8347 1EE 46EB;E8AC 90 A2E8 3C00 7F18 8837 E8C6 84;96E8 3C00 7F4F 882B B0C2 F602 50E2 A0B0;E6F6 15F 57C7 3CAC 7424 E80A 67 45E8;8800 EBD1 E817 3B D188 10EB B0 16CD;E088 4CB4 21CD 815F A0C7 5700 B850 B800;0750 295A 88F5 ACCA 243C D974 3B3C 9274;0D3C DE74 233C 575 D783 EB01 AA01 D088;EBAA E8E4 1E C387 393C 27E 904 FB80;7E39 8003 9C3 F24 E380 B20F F610 E2;88D8 C3C2 3CAC 7420 3CFB 740D 88A5 ACC3;203C F074 D3C 9A74 87C3 2CC3 8030 30EB;0AB4 E4F6 D800 C3
SET V=;RCX;D7;N SYBC.COM;W;Q
(ECHO.%SYBCOM:;=&ECHO.DW %&ECHO.%V:;=&ECHO.%)|DEBUG>NUL
附件 1:ddz59.GIF (2010-3-6 16:40, 18.95 K)
![]()
CODE: [Copy to clipboard]SET SYBCOM=A100;80BE AC00 23C 5472 3CAC 7501 BE13 282;0EEB 3CAC 743A 3C09 740D 8347 1EE 46EB;E8AC 90 A2E8 3C00 7F18 8837 E8C6 84;96E8 3C00 7F4F 882B B0C2 F602 50E2 A0B0;E6F6 15F 57C7 3CAC 7424 E80A 67 45E8;8800 EBD1 E817 3B D188 10EB B0 16CD;E088 4CB4 21CD 815F A0C7 5700 B850 B800;0750 295A 88F5 ACCA 243C D974 3B3C 9274;0D3C DE74 233C 575 D783 EB01 AA01 D088;EBAA E8E4 1E C387 393C 27E 904 FB80;7E39 8003 9C3 F24 E380 B20F F610 E2;88D8 C3C2 3CAC 7420 3CFB 740D 88A5 ACC3;203C F074 D3C 9A74 87C3 2CC3 8030 30EB;0AB4 E4F6 D800 C3
SET V=;RCX;D7;N SYBC.COM;W;Q
if not exist sybc.com (ECHO.%SYBCOM:;=&ECHO.DW %&ECHO.%V:;=&ECHO.%)|DEBUG>NUL
CODE: [Copy to clipboard]然后把DEBUG指令保存在变量V中SET SYBCOM=A100;80BE AC00 23C 5472 3CAC 7501 BE13 282;0EEB 3CAC 743A 3C09 740D 8347 1EE 46EB;E8AC 90 A2E8 3C00 7F18 8837 E8C6 84;96E8 3C00 7F4F 882B B0C2 F602 50E2 A0B0;E6F6 15F 57C7 3CAC 7424 E80A 67 45E8;8800 EBD1 E817 3B D188 10EB B0 16CD;E088 4CB4 21CD 815F A0C7 5700 B850 B800;0750 295A 88F5 ACCA 243C D974 3B3C 9274;0D3C DE74 233C 575 D783 EB01 AA01 D088;EBAA E8E4 1E C387 393C 27E 904 FB80;7E39 8003 9C3 F24 E380 B20F F610 E2;88D8 C3C2 3CAC 7420 3CFB 740D 88A5 ACC3;203C F074 D3C 9A74 87C3 2CC3 8030 30EB;0AB4 E4F6 D800 C3
CODE: [Copy to clipboard]注意10是指参数长度的16进制值,在1.1.21版中它已经没用了,不用管它照着写或写别的16进制值都行.SET V=;A80;DB 10 00 "10303$F1SYBN2010" 0D;;RCX;F0;G;Q
CODE: [Copy to clipboard]---------------------------------------------------------------------------------------------------------(ECHO.%SYBCOM:;=&ECHO.DW %&ECHO.%V:;=&ECHO.%)|DEBUG>NUL
CODE: [Copy to clipboard]大家不需要管为啥要这样写,只需要知道你可以吧参数分段,每段少于65字节,写在引号里就好了,SET V=;A80;DB 10 01;; A280;DB 10 00 "10303$F1SYBN";DB "2010-";DB "3-16" 0D;;RCX;F0;G;Q
附件 1:ddz61.GIF (2010-3-31 18:50, 20.14 K,下载次数: 3)
![]()
CODE: [Copy to clipboard][ Last edited by sl543001 on 2010-3-31 at 19:00 ]@ECHO Off&SETLOCAL ENABLEDELAYEDEXPANSION&SET SYBNV=0.0.2[缩减版]
:SYDLL
call :SYBA
call :SYBC 103003e完全无3方彩色输出示例模块演示代码,以上是效果展示;您看到的所有内容采用完全无3方彩色单行代码输出;大家使用SYBC前需要初始化,执行一次无参数的SYBC,或执行标签SYBA中的代码;标签SYBC与SYBCC需连续放置,不得改变位置关系;大家只要把标签SYBC及其之后的内容插入自己的脚本中;初始化后使用 [CALL :SYBC 参数] 的形式即可无3方调用SYBC;示例代码的参数极限长度为700字节;如有特殊需求可自行修改变量V扩展参数极限;:10000$f0 :::│$fC积$f9 电脑左 $f00 $f2+0$fC=$f00 $f0│$fC 斗地主 V0.0 [测试版] $f0│$f0 [庄家] $f0│ 底 牌 │::: ;:10100$f0 ::│$fC分$f9 电脑右 $f00 $f2+0$fC=$f00 $f0│$f9开发:SYBN NETBENTON PLP $f0│$f9 电脑左 $f0│ │:: ;:10200$f0 :│$fC榜$f9 玩家SYBN $f00 $f2+0$fC=$f00 $f0│$f22010-3-20 按F1查看帮助$f0│$fD 叫分 3分 $f0│ │: ;
pause>nul
exit
:SYBA
(CHCP 437 &GRAFTABL 936)>NUL
ECHO {SYBN DLL %SYBNV% } 内含SYBC 1.1.31 初始化,按任意键继续...
(echo a100&echo db B8 00 00 cd 16 cd 20&echo.&echo.rcx&echo.7&echo.g&echo.q)|DEBUG>NUL
GOTO :EOF
:SYBC
SET SYBCOM=A100`80BE AC00 3C 375 83E9 3C00 ACFF 4275`2CBE AC00 E08A 86AC 50C4 BE1F 0 3CAC`7553 ACFB 593C F675 3CAC 7542 ACF1 433C`EC75 3CAC 7553 ACE7 3D3C E275 14EB 3CAC`743A 3C0F 740D 3C4D 7400 8349 1EE 48EB`54B4 E8AC 93 ADE8 3C00 7F18 8A37 E8F0`87 A1E8 3C00 7F4F 8A2B B0D0 F602 50E2`A0B0 E6F6 35F 57F8 3CAC 7424 E80A 6A`49E8 8A00 EBCA E817 3F CA8A 10EB B0`16CD C48A 4CB4 21CD 815F A0C7 5700 B850`B800 750 2B5A 8AEE ACD1 243C D974 3B3C`8C74 D3C DE74 3C DA74 233C 575 D783`EB01 AA01 C28A EBAA E8E0 1D 3C93 7E39`402 8009 39FB 37E C380 2409 800F FE3`10B2 E2F6 C302 D08A ACC3 203C FB74 D3C`A274 3C 9E74 D88A 3CAC 7420 3CEC 740D`3C93 7400 C38F 2C93 8030 30EB AB4 E4F6`C302 C3`
set SYBCS=%*
SET V=`A80`DB FF``RCX`120`g`Q
(ECHO.%SYBCOM:`=&ECHO.DW %&ECHO.%V:`=&ECHO.%)|DEBUG>nul
goto :EOF
CODE: [Copy to clipboard];sybc 基于x86的16位彩色字符输出 v 1.1.32
;参数列表:
;1.无参数
; 示例: sybc
; 调用:当命令行调用时没有附加参数或debug调用时0080数据为"00"时,启用choice功能,
; 作用:暂停命令行并等待用户输入一个键盘按键,对shift等键无效,对esc,f1,空格.回车等键有效
; 技术:在[标签choice],调用中断15,并使al=ah,退出返回al到erroelrvrer
;2.标准方式
; 示例: sybc 10000$f1sybn$f22010 sybc 10000$f1sybn;$f22010;:10308f4sybn
; set v=`a80`db 10 0d "%sybcc%" 0d``rcx`ff`g`q
; (echo.%sybcom:`=&echo.dw %&echo.%v:`=&echo.%)|debug>nul
; 调用:当命令行调用时加有参数或debug调用时0080不为"00"且0081不为"01"时启用,
; 作用:在一行(无分号)或多行(有分号)或不连续位置(有分号冒号)输出
; 技术:首先读取一个坐标信息[标签hqzb]读取5字节),
; 然后读取一个颜色信息[标签dcx]一个美元符加上2字节颜色信息,这里的美元符可省略
; 然后读取数据并以之前的颜色信息输出到b800显示缓存,从而显示在字符界面上
; 直到遇到控制字符停止,控制字符有:
; {24 "$"}颜色标记符 程序遇到[颜色标记符]则跳转到[标签color],读取2字节颜色信息,仅有紧跟坐标信息的[颜色标记符]可省略
; {3b ";"}换行标记符 程序遇到[换行标记符]则跳转到[标签wz],则换行,除非跟[起始标记符]{3a ":"}连用
; {23 "#"}跳过标记符 程序遇到[跳过标记符]则给di加1,从而保留一个字符,仅改变颜色,不修改#所在位置的原内容
; {0d " "}结束标记符 程序遇到[换行标记符]则结束程序
; {3a ":"}起始标记符 仅限于与[换行标记符]连用有效,跳转到[标签hqzb],从新读取一个坐标颜色信息执行,可用于连接2个sybc命令
; 注意:理论利用";:"可以无线连接sybc,但参数长度有124限制
;3.debug专有模式
; 示例:set v=`a80`db ff``a282`db "%sybcc:~0,75%"`db "%sybcc:~75,75%"`db "%sybcc:~150,75%"`db "%sybcc:~225,75%"`db 0d``rcx`ff`g`q
; (echo.%sybcom:`=&echo.dw %&echo.%v:`=&echo.%)|debug>nul
; 调用:仅限于debug调用,在0080位置写入ff,在0282位置写入参数,从而跳过124参数极限,示例代码的参数极限被扩展到300
; 技术:在修读取时发现0080=ff则修改参数入口为0282,正常调用时不可能出现0080=ff
; 注意:如有需要可修改示例代码进一步扩展参数极限
mov si,0080 ;设置SI=0080 修改指针地址为0080 参数入口
mov DX,0000 ;设置DX=0000
lodsb ;读取DS:SI指针地址的数据到AL 此时SI=0080
mov ah,al ;设置AH=AL AL=从0080读取到的数据
lodsb ;读取DS:SI指针地址的数据到AL 此时SI=0081
lodsb ;读取DS:SI指针地址的数据到AL 此时SI=0082
mov BL,al ;设置BL=AL AL=从0082读取到的数据
cmp ah,00 ;比较 Ah的值 和 0 此时Ah=0080的值
jz #TOchoice ;相等则跳转到标签TOchoice 用以获取键盘输入
cmp ah,ff ;比较 Ah的值 和 FF 此时Ah=0080的值
mov si,0082 ;修改指针地址为0082 从而跳过0081
jnz #hqzb ;不等则跳转到标签hqzb 获取输出坐标
mov si,002c ;设置SI=0080 修改指针为002c 内存变量段地址
lodsb ;读取DS:SI指针地址的数据到AL 此时SI=002c
mov ah,al ;设置AH=AL AL=读取到的数据
lodsb ;读取DS:SI指针地址的数据到AL 此时SI=002d
xchg al,ah ;交换AL和AH
push ax ;把数据压入堆扎 AX被压入堆扎
pop ds ;把数据压出堆扎 DS=刚才上一行的AX
mov si,0000 ;设置SI=0080 修改指针为0000 因为要从内存变量段的开头搜索变量
#SSBL
lodsb ;读取DS:SI指针地址的数据到AL
cmp al,53 ;比较Al和53 53="S"
jnz #SSBL ;不同则跳转到标签SSBL
lodsb ;读取DS:SI指针地址的数据到AL
cmp al,59 ;比较Al和59 53="Y"
jnz #SSBL ;不同则跳转到标签SSBL
lodsb ;读取DS:SI指针地址的数据到AL
cmp al,42 ;比较Al和42 53="B"
jnz #SSBL ;不同则跳转到标签SSBL
lodsb ;读取DS:SI指针地址的数据到AL
cmp al,43 ;比较Al和43 53="C"
jnz #SSBL ;不同则跳转到标签SSBL
lodsb ;读取DS:SI指针地址的数据到AL
cmp al,53 ;比较Al和53 53="S"
jnz #SSBL ;不同则跳转到标签SSBL
lodsb ;读取DS:SI指针地址的数据到AL
cmp al,3d ;比较Al和3d 53="="
jnz #SSBL ;不同则跳转到标签SSBL
jmp #hqzb ;无条件跳转到标签hqzb 如果满足以上条件则 获取输出坐标
#TOchoice
JMP #choice ;无条件跳转到标签choice 条件寻址是短寻址,够不到choice只能用JMP中转一下
;读取到分号后的处理
#wz
lodsb ;读取DS:SI指针地址的数据到AL
cmp al,3a ;比较Al和3a 3a=":"
jz #hqzb ;相同则跳转到标签hqzb 为:则读取新坐标
cmp al,0d ;比较Al和0d OD=结束符
jz #quit ;相同则跳转到标签quit 为结束符则结束
cmp al,00 ;比较Al和0 3a=空
jz #quit ;相同则跳转到标签quit 为结束符则结束
sub si,01 ;设置SI减1
jmp #xhn ;无条件跳转到标签XHN 其他则换行继续
;读取坐标信息,存放到di
#hqzb
lodsb ;读取DS:SI指针地址的数据到AL 跳过一个字符
;键将来要在这里添加一些内容
call #DQ2SJ ;调用子程序DQ2SJ 读取2个数据
call #ZH10JZ ;调用子程序ZH10JZ 转换为10进制
cmp al,18 ;比较Al和18 AL是刚获得的行号
jg #quit ;大于则跳转到标签QUIT 行数超过24则结束
mov dh,al ;设置DH=AL 保存行号到DH
call #DQ2SJ ;调用子程序DQ2SJ 读取2个数据
call #ZH10JZ ;调用子程序ZH10JZ 转换为10进制
cmp al,4f ;比较Al和4f AL是刚获得的列号
jg #quit ;大于则跳转到标签QUIT 行数超过80则结束
mov dl,al ;设置DL=AL 保存列号到DL
;把来源于DH和DL的行列坐标转换为内存地址并保存到DI
#ZBZH
mov al,02 ;
mul dl ;
push ax ;
mov al,a0 ;
mul dh ;
pop di ;
add di,ax ;
push di ;
;读取颜色信息
#dcx
lodsb ;读取DS:SI指针地址的数据到AL
cmp al,24
jz #color ;为$则跳过从新读取
call #DQ2SJ0 ;不为$则正常读取
call #dc0
mov cl,dl
jmp #dwz
#color
call #dc
mov cl,dl
jmp #dwz
;choice功能
#choice
mov al,0
int 16
mov al,ah
;退出
#quit
mov ah,4c
int 21
;换行并从原起点继续
#xhn
pop di
add di,a0
push di
;定位字符输出位置
#dwz
push ax
mov ax,b800
push ax
pop es
pop dx
sub bp,si
mov dl,cl
;写入数据
#xr
lodsb ;读取DS:SI指针地址的数据到AL
cmp al,24
jz #color ;为$则读取新的颜色信息
cmp al,3b
jz #wz ;为;则结束,再次从头执行
cmp al,0d
jz #quit ;为结束符则结束
cmp al,0
jz #quit ;为结束符则结束
cmp al,23
jnz #xr2 ;为#则
adc di,1
jmp #xr3
#xr2
stosb ;写入一个数据
#xr3
mov al,dl
stosb ;写入颜色信息
jmp #xr
;读取2个字节的字符内容,转换为颜色信息
#dc
call #DQ2SJ
#dc0
xchg ax,bx
cmp al,39
jle #dc1
add al,9
#dc1
cmp bl,39
jle #dc2
add bl,9
#dc2
and al,0f
and bl,0f
mov dl,10
mul dl
add al,bl
mov dl,al
ret
;读取2个字节的内容
#DQ2SJ
lodsb ;读取DS:SI指针地址的数据到AL
#DQ2SJ0
cmp al,20
jz #DQ2SJ
cmp al,0d
jz #quit ;为结束符则结束
cmp al,0
jz #quit ;为结束符则结束
mov bl,al
#DQ2SJ1
lodsb ;读取DS:SI指针地址的数据到AL
cmp al,20
jz #DQ2SJ
cmp al,0d
jz #quit ;为结束符则结束
cmp al,0
jz #quit ;为结束符则结束
ret
;10进制字符转16进制数字
#ZH10JZ
xchg ax,bx
sub al,30
sub bl,30
mov ah,0a
mul ah
add al,bl
ret
| 欢迎光临 中国DOS联盟论坛 (http://cndos.fam.cx/forum/) | Powered by Discuz! 2.5 |