易码技术论坛

 找回密码
 加入易码
搜索
查看: 236451|回复: 9

[原创]在任意位置显示6*6英文字符汇编代码.

[复制链接]
发表于 2005-1-30 13:04:00 | 显示全部楼层
因为我嫌NC2k以上机型中英文字符的小字模式没有原来的NC1020的好看,就加了个字符库进去,呵呵
这样会多占用将近1k的空间,当然也可以直接用星星的字库点阵数据
NC3000的中断是:
BRK  $C706          取6*6字母点阵数据
入参:字符送A,            出参0280开始的12个字节
BRK $C704           取8*8字母点阵数据
入参:A                        出参:....
BRK $C701            取16*16的汉字点阵数据
BRK $c705            取12*12的汉字点阵数据
 楼主| 发表于 2005-1-30 13:23:00 | 显示全部楼层
以下是引用QIQI在2005-1-30 13:19:06的发言:

太恐怖 了。。。。

QIQI,你的任意位置似乎不那么任意吧!

你的横坐标只能是8的整数倍!
 楼主| 发表于 2005-1-30 13:31:00 | 显示全部楼层
我只是来讨论算法!
对中断现在兴趣不大,因为文曲星每种机型中断都不尽相同,没必要费时间到这种对提高编程水平没多大意义的事上。
而且我反正也大概不会去写个超过16K的程序,所以空间对偶也不那么重要;真的超过16K再用中断不迟
总之我觉得学汇编还是想想怎么用汇编实现好,太多依赖中断也未必是好事
 楼主| 发表于 2005-1-30 13:41:00 | 显示全部楼层
以下是引用QIQI在2005-1-30 13:35:37的发言:
中断是个好东西,没了它写点小游戏还可以,其它就难了,比如,文书浏览器,不用中断,程序将大到放不下

呵呵。。。。。。。。
不想多说了~
发表于 2005-1-30 16:29:00 | 显示全部楼层
支持Eastsun的说~不喜欢中断~喜欢自己写
发表于 2005-1-30 16:31:00 | 显示全部楼层
中断确实是个好东西,不过要看你是想会的究竟是“汇编”还是“XX平台汇编”了。
发表于 2005-1-30 17:12:00 | 显示全部楼层
上面的问题显然答案很明显嘛……中断我用来学习~不用来调用~当然一些复杂的我还是有用……呵呵~
 楼主| 发表于 2005-1-30 18:19:00 | 显示全部楼层
楼上说的很对!
那些系统调用实现的代码一般来说是效率很高的,但它功能未必与我们的要求很吻合,而且我也不会一直去弄文曲星上的汇编.
我的目的是弄懂它们的实现原理或算法,以写出很喝自己要求的代码.
当然很可能不如直接用调用来得简单.
但是学汇编并不能一味去找系统调用,而不去想那些功能是怎么实现的.
我用C7很比用系统调用耗电这是事实,但是:1.我要实现的是动态画面,所以不能简单的用一下读取按键的系统调用了事
2.如果知道知道读键中断的原理,也就可以写出即省电又能实现动态画面的代码了(但目前我不知道)
所以我觉得多讨论些程序算法比及原理比发表一些系统中断的用法是要好的~
PS:其实我也是从写那个图形函数库才开始弄与6502有关的算法的,所以写出来的程序肯定不会太好;我贴出来也是方便大家一起讨论~
发表于 2005-1-30 20:25:00 | 显示全部楼层
技术论坛里面讨论算法还是应该提倡的,这是更实在的东西。
因为这里不是WQX汇编专门论坛,QIQI也没必要每帖必提中断啊。
各有各的好处呀。
 楼主| 发表于 2005-1-30 12:55:13 | 显示全部楼层 |阅读模式
               .INCLUDE ".\head\graph.asm"                ;就是我原来发的那个与平台无关的函数库
;******************************************
;函数说明:将数字或字母打印到屏幕或缓存
;入参:A屏幕0,缓存1;$80~$81:屏幕位置x,y,$3007:状态1:copy 2:not
;character->$92
;******************************************
CharacterData:
.DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.DB $00,$00,$20,$20,$20,$20,$20,$20,$00,$20,$00,$00,$00,$28,$50,$50
.DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$28,$28,$FC,$28,$50,$FC
.DB $50,$50,$00,$00,$00,$20,$78,$A8,$A0,$60,$30,$28,$A8,$F0,$20,$00
.DB $00,$00,$48,$A8,$B0,$50,$28,$34,$54,$48,$00,$00,$00,$00,$20,$50
.DB $50,$78,$A8,$A8,$90,$6C,$00,$00,$00,$40,$40,$80,$00,$00,$00,$00
.DB $00,$00,$00,$00,$00,$04,$08,$10,$10,$10,$10,$10,$10,$08,$04,$00
.DB $00,$40,$20,$10,$10,$10,$10,$10,$10,$20,$40,$00,$00,$00,$00,$20
.DB $A8,$70,$70,$A8,$20,$00,$00,$00,$00,$00,$20,$20,$20,$F8,$20,$20
.DB $20,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$40,$40,$80
.DB $00,$00,$00,$00,$00,$F8,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.DB $00,$00,$00,$00,$00,$40,$00,$00,$00,$08,$10,$10,$10,$20,$20,$40
.DB $40,$40,$80,$00,$00,$00,$70,$88,$88,$88,$88,$88,$88,$70,$00,$00
.DB $00,$00,$20,$60,$20,$20,$20,$20,$20,$70,$00,$00,$00,$00,$70,$88
.DB $88,$10,$20,$40,$80,$F8,$00,$00,$00,$00,$70,$88,$08,$30,$08,$08
.DB $88,$70,$00,$00,$00,$00,$10,$30,$50,$50,$90,$78,$10,$18,$00,$00
.DB $00,$00,$F8,$80,$80,$F0,$08,$08,$88,$70,$00,$00,$00,$00,$70,$90
.DB $80,$F0,$88,$88,$88,$70,$00,$00,$00,$00,$F8,$90,$10,$20,$20,$20
.DB $20,$20,$00,$00,$00,$00,$70,$88,$88,$70,$88,$88,$88,$70,$00,$00
.DB $00,$00,$70,$88,$88,$88,$78,$08,$48,$70,$00,$00,$00,$00,$00,$00
.DB $20,$00,$00,$00,$00,$20,$00,$00,$00,$00,$00,$00,$00,$20,$00,$00
.DB $00,$20,$20,$00,$00,$04,$08,$10,$20,$40,$20,$10,$08,$04,$00,$00
.DB $00,$00,$00,$00,$F8,$00,$00,$F8,$00,$00,$00,$00,$00,$40,$20,$10
.DB $08,$04,$08,$10,$20,$40,$00,$00,$00,$00,$70,$88,$88,$10,$20,$20
.DB $00,$20,$00,$00,$00,$00,$70,$88,$98,$A8,$A8,$B8,$80,$78,$00,$00
.DB $00,$00,$20,$20,$30,$50,$50,$78,$48,$CC,$00,$00,$00,$00,$F0,$48
.DB $48,$70,$48,$48,$48,$F0,$00,$00,$00,$00,$78,$88,$80,$80,$80,$80
.DB $88,$70,$00,$00,$00,$00,$F0,$48,$48,$48,$48,$48,$48,$F0,$00,$00
.DB $00,$00,$F8,$48,$50,$70,$50,$40,$48,$F8,$00,$00,$00,$00,$F8,$48
.DB $50,$70,$50,$40,$40,$E0,$00,$00,$00,$00,$38,$48,$80,$80,$9C,$88
.DB $48,$30,$00,$00,$00,$00,$CC,$48,$48,$78,$48,$48,$48,$CC,$00,$00
.DB $00,$00,$F8,$20,$20,$20,$20,$20,$20,$F8,$00,$00,$00,$00,$7C,$10
.DB $10,$10,$10,$10,$10,$90,$E0,$00,$00,$00,$EC,$48,$50,$60,$50,$50
.DB $48,$EC,$00,$00,$00,$00,$E0,$40,$40,$40,$40,$40,$44,$FC,$00,$00
.DB $00,$00,$D8,$D8,$D8,$D8,$A8,$A8,$A8,$A8,$00,$00,$00,$00,$DC,$48
.DB $68,$68,$58,$58,$48,$E8,$00,$00,$00,$00,$70,$88,$88,$88,$88,$88
.DB $88,$70,$00,$00,$00,$00,$F0,$48,$48,$70,$40,$40,$40,$E0,$00,$00
.DB $00,$00,$70,$88,$88,$88,$88,$E8,$98,$70,$18,$00,$00,$00,$F0,$48
.DB $48,$70,$50,$48,$48,$EC,$00,$00,$00,$00,$78,$88,$80,$60,$10,$08
.DB $88,$F0,$00,$00,$00,$00,$F8,$A8,$20,$20,$20,$20,$20,$70,$00,$00
.DB $00,$00,$CC,$48,$48,$48,$48,$48,$48,$30,$00,$00,$00,$00,$CC,$48
.DB $48,$50,$50,$30,$20,$20,$00,$00,$00,$00,$A8,$A8,$A8,$70,$50,$50
.DB $50,$50,$00,$00,$00,$00,$D8,$50,$50,$20,$20,$50,$50,$D8,$00,$00
.DB $00,$00,$D8,$50,$50,$20,$20,$20,$20,$70,$00,$00,$00,$00,$F8,$90
.DB $10,$20,$20,$40,$48,$F8,$00,$00,$00,$38,$20,$20,$20,$20,$20,$20
.DB $20,$20,$38,$00,$00,$40,$40,$40,$20,$20,$10,$10,$10,$08,$00,$00
.DB $00,$70,$10,$10,$10,$10,$10,$10,$10,$10,$70,$00,$00,$20,$50,$00
.DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.DB $00,$00,$00,$FC,$00,$20,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.DB $00,$00,$00,$00,$00,$30,$48,$38,$48,$3C,$00,$00,$00,$00,$C0,$40
.DB $40,$70,$48,$48,$48,$70,$00,$00,$00,$00,$00,$00,$00,$38,$48,$40
.DB $40,$38,$00,$00,$00,$00,$18,$08,$08,$38,$48,$48,$48,$3C,$00,$00
.DB $00,$00,$00,$00,$00,$30,$48,$78,$40,$38,$00,$00,$00,$00,$1C,$20
.DB $20,$78,$20,$20,$20,$78,$00,$00,$00,$00,$00,$00,$00,$3C,$48,$30
.DB $40,$78,$44,$38,$00,$00,$C0,$40,$40,$70,$48,$48,$48,$EC,$00,$00
.DB $00,$00,$20,$00,$00,$60,$20,$20,$20,$70,$00,$00,$00,$00,$10,$00
.DB $00,$30,$10,$10,$10,$10,$10,$E0,$00,$00,$C0,$40,$40,$5C,$50,$70
.DB $48,$EC,$00,$00,$00,$00,$E0,$20,$20,$20,$20,$20,$20,$F8,$00,$00
.DB $00,$00,$00,$00,$00,$F0,$A8,$A8,$A8,$A8,$00,$00,$00,$00,$00,$00
.DB $00,$F0,$48,$48,$48,$EC,$00,$00,$00,$00,$00,$00,$00,$30,$48,$48
.DB $48,$30,$00,$00,$00,$00,$00,$00,$00,$F0,$48,$48,$48,$70,$40,$E0
.DB $00,$00,$00,$00,$00,$38,$48,$48,$48,$38,$08,$1C,$00,$00,$00,$00
.DB $00,$D8,$60,$40,$40,$E0,$00,$00,$00,$00,$00,$00,$00,$78,$40,$30
.DB $08,$78,$00,$00,$00,$00,$00,$20,$20,$70,$20,$20,$20,$18,$00,$00
.DB $00,$00,$00,$00,$00,$D8,$48,$48,$48,$3C,$00,$00,$00,$00,$00,$00
.DB $00,$EC,$48,$50,$30,$20,$00,$00,$00,$00,$00,$00,$00,$A8,$A8,$70
.DB $50,$50,$00,$00,$00,$00,$00,$00,$00,$D8,$50,$20,$50,$D8,$00,$00
.DB $00,$00,$00,$00,$00,$EC,$48,$50,$30,$20,$20,$C0,$00,$00,$00,$00
.DB $00,$78,$10,$20,$20,$78,$00,$00,$00,$18,$10,$10,$10,$20,$10,$10
.DB $10,$10,$18,$00,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10
.DB $00,$60,$20,$20,$20,$10,$20,$20,$20,$20,$60,$00,$40,$A4,$18,$00
.DB $00,$00,$00,$00,$00,$00,$00,$00
CLsrData1:
  .DB $03,$81,$c0,$e0,$f0,$f8,$fc,$fe
CLsrData2:
  .DB $ff,$ff,$ff,$7f,$3f,$1f,$0f,$07
;*****************************************  
DrawCharacter:
       JMP CharacterCode0
   
;code 1:条件0280~$028b为点阵数据;作用...
CharacterCode1:
       LDX #$0b
       LDA #$00
ChCodeLoop1:
       STA $028c,x
       DEX
       BPL ChCodeLoop1
       LDX $84
       LDY $85
       LDA $86
       JSR GetxyIndex
       STX $82
       STX $40
       LDY $82
ChCodeLoop3:
       DEY
       BMI ChCodeLabel1
       LDX #$0b
ChCodeLoop2:
       LSR $0280,x
       ROR $028c,x
       DEX
       BPL ChCodeLoop2
       JMP ChCodeLoop3
ChCodeLabel1:
       LDA $3007
       CMP #$01
       BNE ChCodeLabel2
       JMP ChType1
ChCodeLabel2:
       CMP #$02
       BNE ChCodeLabel3
       JMP ChType2
ChCodeLabel3:
       JMP ChReturn
;***************************
ChType1:
       JMP CharacterCode2

ChType2:
       LDY $82
       LDA CLsrData1,y
       EOR #$ff
       TAY
       LDX #$0b
ChType2Loop1:
       TYA
       EOR $0280,x
       STA $0280,x
       DEX
       BPL ChType2Loop1      
       LDY $82
       LDA CLsrData2,y
       EOR #$ff
       TAY
       LDX #$0b
ChType2Loop2:
       TYA
       EOR $028c,x
       STA $028c,x
       DEX
       BPL ChType2Loop2
       JMP CharacterCode2              
;************************************
CharacterCode2:
       LDA $80
       STA $82
       LDA $81
       STA $83
ChCode2Loop1:      
       LDA #$50
       SEC
       SBC $85
       STA $fe
       LDA $84
       CMP #$a0
       BCC ChCode2Label10
       JMP ChReturn
ChCode2Label10:
       LDA $85
       CMP #$50
       BCC ChCode2Label1
       JMP ChReturn
ChCode2Label1:      
       LDY #$00
       LDX $40
       LDA CLsrData1,x
       TAX
ChCode2Loop2:   
       TXA
       AND ($80),y
       ORA $0280,y
       STA ($80),y
       DEC $fe
       BNE ChCode2Label20
       JMP ChCode2Label2
ChCode2Label20:      
       INY
       CPY #$0c
       BEQ ChCode2Label2
       CLC
       LDA #$13
       ADC $80
       STA $80
       LDA #$00
       ADC $81
       STA $81
       JMP ChCode2Loop2
ChCode2Label2:
       INC $82
       LDA $82
       STA $80
       BNE ChCode2Label3
       INC $83
ChCode2Label3:      
       LDA $83
       STA $81
       LDA #$50
       SEC
       SBC $85
       STA $fe
       LDA $84
       CLC
       ADC #$06
       CMP #$a0
       BCC ChCode2Label4
       JMP ChReturn
ChCode2Label4:
       LDY #$00
       LDX $40
       LDA CLsrData2,x
       TAX
ChCode2Loop3:   
       TXA
       AND ($80),y
       ORA $028c,y
       STA ($80),y
       DEC $fe
       BNE ChCode2Label40
       JMP ChReturn
ChCode2Label40:      
       INY
       CPY #$0c
       BEQ ChCode2Label5
       CLC
       LDA #$13
       ADC $80
       STA $80
       LDA #$00
       ADC $81
       STA $81
       JMP ChCode2Loop3
ChCode2Label5:
       JMP ChReturn
;*****************************
ChA  =$86
ChX  =$84
ChY  =$85

CharacterCode0:
       TAY
       LDA $84
       PHA
       LDA $85
       PHA
       LDA $86
       PHA
       LDA $40
       PHA
       STY $86
       LDA $80
       STA $84
       LDA $81
       STA $85
       LDA $92
       sec
       sbc #$20
       STA $80
       LDA #$00
       STA $81
       ASL $80
       ROL $81
       ASL $80
       ROL $81
       LDX $80
       LDY $81
       ASL $80
       ROL $81
       CLC
       TXA
       ADC $80
       STA $80
       TYA
       ADC $81
       STA $81
       CLC
       LDA #<CharacterData
       ADC $80
       STA $80
       LDA #>CharacterData
       ADC $81
       STA $81
       LDY #$0b
ChCode0Loop1:
       LDA ($80),y
       STA $0280,y
       DEY
       BPL ChCode0Loop1
       JMP CharacterCode1
      
ChReturn:
       PLA
       STA $40
       PLA
       STA $86
       PLA
       STA $85
       PLA
       STA $84
       RTS
;******************************************
;函数说明:TextOut,将一以00结尾的英文字符串。。
;入参:A,$3000,$3001:x,y;$3007,$80,$81:数据地址
;******************************************
TextOut:
       TAY
       LDA $40
       PHA
       LDA $41
       PHA
       LDA $42
       PHA
       STY $42
       LDA $80
       STA $40
       LDA $81
       STA $41
TextOutLoop1:      
       LDA $3000
       CMP #$a0
       BCC TextOutLabel1
       JMP TextOutReturn
TextOutLabel1:
       STA $80
       LDA $3001
       CMP #$50
       BCC TextOutLabel2
       JMP TextOutReturn               
TextOutLabel2:
       STA $81
       LDY #$00
       LDA ($40),y
       BNE TextOutLabel3
       JMP TextOutReturn
TextOutLabel3:
       STA $92
       LDA $42
       JSR DrawCharacter
       CLC
       LDA #$06
       ADC $3000
       STA $3000
       INC $40
       BNE TextOutLabel4
       INC $41
TextOutLabel4:
       JMP TextOutLoop1

TextOutReturn:
       PLA
       STA $42
       PLA
       STA $41
       PLA
       STA $40
       RTS
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

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

GMT+8, 2024-4-20 02:18 , Processed in 0.014056 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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