易码技术论坛

 找回密码
 加入易码
搜索
查看: 634257|回复: 20

问题继续出现

[复制链接]
发表于 2006-12-17 13:32:13 | 显示全部楼层
不想调用刷新中断,何必要顾及文字的显存地址是$2C0开始的呢?
 楼主| 发表于 2006-12-21 22:06:51 | 显示全部楼层
??楼上的意思是?应该如何实现显示字符呢?
发表于 2006-12-22 09:07:48 | 显示全部楼层
我很不明白,有现成的中断可以用为什么不用,反而是舍近求远让程序变得更加复杂呢??
 楼主| 发表于 2006-12-23 20:07:58 | 显示全部楼层
是想知道它的原理而已,难道你不想知道吗?
发表于 2006-12-24 13:03:20 | 显示全部楼层
呵呵,你想知道原理的话就比较简单了
反一下刷屏中断不就可以了!!
 楼主| 发表于 2006-12-25 00:18:07 | 显示全部楼层
中断地址如何找?
发表于 2006-12-25 10:14:51 | 显示全部楼层
引用第8楼不炫耀会死星人2006-11-02 19:44发表的“”:
$ac09 翻到$ac页 然后取$4000+9*2和$4001+9*2为地址 跳转
如果是$cxyy 这样的 则是让地址$0a=#$0x 然后取$a000+yy*2和$a001+yy*2为地址
好似是这样的 很久没碰过汇编了 不晓得记得对不对=v=
 楼主| 发表于 2006-12-27 19:43:36 | 显示全部楼层
那其他的类型呢?怎么找?
发表于 2006-12-27 19:49:40 | 显示全部楼层
你知道我说的是什么机型么??一一U
发表于 2006-12-28 22:02:54 | 显示全部楼层
是啊,不同的机型,中断跳转的方式还不一样呢……
发表于 2006-12-28 23:02:22 | 显示全部楼层
一般都是一样的 NC系列跳转大概都是一样吧
至于文字刷新的原理 其实很简单
通过字的编码(英文就是ASCII中文是内码嘛。。。具体忘了)算出这个字符的点阵信息位置
从字库中将点阵信息读取出来 然后送至显存 就会刷新到屏幕了
另外还要单独处理下回车之类的特殊字符

我很久以前画过一个自己的字库 并且有附带屏幕刷新子程序 不过那个写的很简单 而且只是E文字库而已
 楼主| 发表于 2006-12-30 01:15:13 | 显示全部楼层
恩!不过其他类型的中断怎么找还是没说呀!nc系列的
发表于 2006-12-30 13:23:16 | 显示全部楼层
我说的就是NC的!
发表于 2006-12-30 18:23:14 | 显示全部楼层
嗯 他引用的我的那段话里的
$ac09只是一个例子 一般类型的$xxyy都是那样的
发表于 2006-12-30 18:37:40 | 显示全部楼层
贴一个全的
(1) INT $0xyy型中断的响应

调用第x页码中 ($4000 + 2*yy) 所指向的程序

比如 INT $0302
  在 03 页码中,4000开始的数据为 60 EA 40 40 6F 40.......
  4000+2*01=4004, ($4004)=$6F,($4003)=$40
  所以 INT $0302 就是调用03页码的 $406F处的子程序.

i(2) INT $1xyy ~ INT $3xyy

此类中断,会先从 $05C4 中读出一个值,作为页码的 "基准0页",然后转移到偏移x页中执行 ($4000 + 2*yy) 所指向的程序.

此类中断一般用于应用程序中,系统在运行一个应用程序时(一般是大于8K的程序),会先将该程序的起始页码值置入 $045C,然后在程序中通过调用 INT $3xyy 来实现调用不同页码中的子程序.

例如英雄坛说,假定我的英雄坛说在第05页~08页码分布,在某处用到了INT $3008 (这个是我修改的英雄坛,尚未发表,所以大家的可能不会有 INT $3008 这个调用,这里只是为了说明问题).下面讲一下INT $3008的响应过程:
  A.在系统运行英雄坛说时,会自动将其所在的第一页码值(即05)放入$05C4中.
  B.如上面所说,INT $3008 就是执行"偏移0页"的某段程序,"偏移0页"这里就是相对于($05C4)页相对于即05页的偏移0页,(还是第05页),然后 $4000 + 2*$08=$4010,在英雄坛说的初页$4010处我写入了数据 A0 62,那么这个INT $3008就会调用第05页的 $62A0 处的程序.


(3) INT $4xyy ~ INT $7xyy

实际上根本就不存在此类中断,但如果你强行调用,系统也是会响应的。由于中断服务程序中有BUG,此类中断一般只会引起死机。强行调用时系统的响应过程如下:
  A.先从 $05C4 中读出一个值,作为页码的 "基准0页",将页码翻至偏移x页处.即 ($05C4) + x → ($00)
  B.调用 ($C000 + 2*yy) 处所指向的程序.这就是BUG所在.应该是调用 ( $4000 + 2*yy )处所指向的程序才对,与第 (2)种中断归为一类才对。
  
由于无此类中断,这里就不举例了。


(4) INT $8xyy ~ INT $Bxyy

此类中断在徐哥的6502编程大奥秘中已经作了说明,这里再简单说一下:

A. INT $XXYY中的XX为页码。翻到XX页。即 XX → ($00)
B. 调用 ($4000 + 2*yy) 处所指向的程序


(5) INT $Cxyy ~ INT $FEyy

此类中断,均等同于 INT $Cxyy
响应过程如下:
A. 将($0A)中置入x,即 x → ($0A)
B. 调用 ($C000 + 2*yy) 处所指向的程序

(6) INT $FFxx

此类中断是系统的内置音乐播放程序。音乐在后台播放。响应过程如下:

A. 检测电池电量,若低电,则返回主程序
B. 检测游戏音乐开关,若关,则返回主程序
C. 检测 xx 的值,若大于或等于 #$7D 则返回主程序
D. 从第 84 页 $B300 + 2*xx 中找出值,置入 ($AA), $B301 + 2*xx 中找出值,置入 ($AB).  即 84页:  ($B300 + 2*xx ) → ($AA) , ($B301 + 2*xx ) → ($AB)
E. 分别将 01 和 80 置入 ($04B5) 和 ($04B6)
F. JMP $E452
 楼主| 发表于 2006-12-30 22:06:32 | 显示全部楼层
好东西啊!谢谢咯!
发表于 2007-2-14 11:45:45 | 显示全部楼层
不想用刷新中断,在BASIC中只要使用一个单独的PRINT就可以了。
不过PRINT同时还有换行的作用,需要注意一下。
 楼主| 发表于 2007-2-15 16:51:54 | 显示全部楼层
我的意思是自己写这个中断,或者知道这个中断的关键代码是什么??
发表于 2007-2-15 19:17:42 | 显示全部楼层
哦,求学路漫漫啊

记得以前乱翻sysdir的时候看到了WQX的字库。应该跟11楼说的一样,根据ASCII码,在字库里找到对应的数据再送到屏幕显存。
发表于 2007-2-16 20:17:01 | 显示全部楼层
我反过1020的刷新屏幕中断 自己也给自己的那个E文字库写过一个 汇编版有帖子的
原理就是我说的那样 根据字符编码计算点阵数据存储地址 读出处理传到显存

BASIC的话 PRINT;就不会换行了
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

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

GMT+8, 2024-4-25 06:43 , Processed in 0.010604 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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